1樓:
任何時候都可以使用陣列,使用指標。
定義時,通常只有字元指標,和字元陣列指標直接定義。用來表示字串或字串陣列。
其他一般定義陣列。操作時用指標或陣列。
其他指標,多半用在引數傳遞,資料結構內部(不確定需要記憶體的大小,或者連結串列,二叉樹等鏈式結構)的時候。
還有一種是有些函式引數就是指標,這時定義一個指標,來操作傳進來的指標引數比較好。
指標作為引數,有一下幾種用法,
1)當作陣列用,用來獲取或設定陣列元素。
2)把一個比較長的資料結構傳入函式,只需要一個指標就夠了。
3)傳入變數的地址,用來讀取或修改變數的值,主要是為了修改用。
直接定義一個不指向任何物件的指標,並且也從不給他賦值,沒什麼意義;
指標要麼指向陣列,要麼指向變數,要麼動態申請記憶體。
null指標,只是一個方便的指標,表示不指向任何物件。
真正有用的還是指向具體物件的指標。
如果定義了一個指標,使用時要讓他指向一個具體物件,當需要他不指向什麼物件的時候,給他賦值為null;
ps:c語言,陣列名只是一個指標常量而已,離開定義可見處,陣列大小的資訊就不存在了。
只有定義完全可見的地方,才可以獲得陣列的大小。
陣列作為函式的引數,和外部引用宣告都不能獲得陣列的大小。
引數只能傳遞指標,引數的大小隻是指標的大小;
只能看到宣告的地方,獲取陣列大小的努力,只能換來錯誤。
void fun1(int a[10]) //<==> void fun1(int a) <==>void fun1(int *a)
void fun2(int [10][10])// <==>void fun2(int a[10])<==> void fun2(int (*a)[10])
2樓:匿名使用者
陣列指標--指向陣列的指標,是一個指標,其指向的型別是陣列;指標陣列--元素為指標的陣列,是一個陣列,其中的元素為指標。仔細研讀下面的程式:
#include
intmain(void)
,};int (* p)[2];
char * s[2] = ;
p = a;
printf("%d, %d, %d, %d\n", (*p)[0], (*p)[1], (*(p+1))[0], (*(p+1))[1]);
printf("%s %s\n", s[0], s[1]);
return 0;}
3樓:匿名使用者
個人認為,當你需要某一變數需要一直存在的話,那麼程式初始化時就可以直接使用陣列之類的;
而當你需要對已存在於記憶體的某些量做改變時,則適宜使用指標。
這裡需要注意的是,使用陣列的前提是記憶體靜態分配,其大小是不可改變的;所以若要求動態分配的話,還是需要使用指標的。希望對你有所幫助。
4樓:匿名使用者
陣列是定長的,你申明多長就是多長,它的記憶體空間是靜態的,定義時就已分配,以後不會變;
指標是不定長的,你用多少就是多少,它的記憶體是動態的,用的時候才分配。
5樓:匿名使用者
最討厭學院派的概念什麼的東西了,我不敢吹,怕人罵,但我可以誠心告訴您,陣列和指標都是訪問記憶體操作而已,只不過寫法不同,根據方便閱讀和容易理解的程度來選擇
6樓:匿名使用者
如果你想靜態定義的時候你可以使用陣列,動態定義的話可以使用指標,可以通過關鍵字new來給指標分配記憶體空間,例如,
char arr[10] 你無論用不用得完這陣列,這空間都會被佔用但是如果你定義 char *arr;
然後再根據你要存的資料的大少分配記憶體,就省空間咯!
7樓:下一站埃菲爾
陣列可以定義多個常量,運用比較方便,第一步通常是陣列的初始化,就是給陣列賦值。指標有兩個運用,第一個是呼叫函式,第二個是做函式的引數。
8樓:匿名使用者
噢, 看你需要!
工具提供給你, 看你怎麼用
9樓:開文玉山綾
這是不可能的,因為事先並不知道陣列的大小,就不能分配記憶體,所以才有了動態記憶體分配。也就是malloc()等一系列函式還有c++特有的new運算子,當然,所謂的可變長陣列只是在編譯器內部耍了這些小把戲,也就是下面的網友說的c99標準中的用法。
c語言中:陣列指標與指標陣列有什麼區別?
10樓:匿名使用者
陣列指標是指向這個陣列首地址的指標,指向物件是這個陣列;
指標陣列是存放一類指標的陣列,這個陣列的每個元素都是一個指標;
例子:int a[10];
int* s;
s = a;//這裡s就是一個陣列指標,它的值就是陣列a 的首地址;當然,如果a是一個整數,那s就是一個指向整型的指標;
int a;
int* s[5];
for(int i=0;i<5;i++)s[i]=a;
//這裡s就是一個指標陣列,它的每個元素都是整型變數a的地址應該算比較明白了吧
謝樓上提醒
11樓:天雲一號
int (*p)[4]; // 定義一個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。
int *p[4]; // 定義一個指標陣列,陣列中每個元素是一個指標,指標指向**就要根據程式來定了。
判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。
int (*p)[4]; // 由於( )的優先順序高,說明p是一個指標,指向一個一維陣列的指標
int *p[4]; // 由於[ ]的優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列
12樓:匿名使用者
1.大概說一下這三種
int * a; 這叫整型指標 這玩意兒不能指向陣列,搞清楚指向的是陣列首元素
int (* b); 這叫整型陣列指標 意思是指向陣列的指標
int * c[5]=null; 這叫整型指標陣列 意思是儲存指標的陣列
下來舉個例子,理解一下:
2.定義一個陣列,下面舉例解釋
int i[5]=; //定義整型陣列,五元素皆為0
int n[5][5]=; //定義二維陣列
3.三種分別舉例
(a的例子)
a=i; //這裡i是陣列名,i相當於&i[0]。陣列名相當於是陣列i的首地址。此時* a指向陣列i首元素。
a++;然後輸出就是i[1]的值
(b的例子)
b=n; //二維陣列名相當於n[5]這個陣列,注意這塊兒,這塊兒最難搞清楚。n代表的不是第一行第一個元素的地址,而是代表第一行元素的所有地址的陣列。這塊的指標陣列b相當於存放了n陣列第一行的所有元素的地址。
//這塊的陣列指標b和上面的指標a比較,a指向的是陣列的首元素,而b指向的是整個陣列(或者說是存放了整個一維陣列的多個元素(二維陣列由一維陣列構成,二維陣列的第一行即是一個一位陣列))
然後我們輸出(* b)[2]相當於輸出了n[0][2]
如果b++然後輸出(* b)[2]相當於輸出了n[1][2]
c的玩法:
太簡單了,不想說了。就是存放多個指標的陣列,自己想想。
13樓:匿名使用者
摟主先要明確每個詞的後面一個名詞代表其所要定義的型別陣列指標就是指向一個陣列首地址的指標(aa);
舉例:char a="hello world";
char *aa;
aa=a;
指標陣列就是一個陣列,這個陣列的元素是指標;
舉例:char a='t';
char *aa[2];
a[0]=a;
a[1]=a;
附:感覺樓上的這段舉例有點問題
int a[10];
int* s;
s = &a;
c語言用指標解遍歷陣列?
14樓:99承情
指標解遍歷陣列例題:
#include
int main();
int i, *p = arr, len = sizeof(arr) / sizeof(int);
for(i=0; iprintf("%d ", *(p+i) );}printf("\n");
return 0;
}陣列在記憶體中只是陣列元素的簡單排列,沒有開始和結束標誌,在求陣列的長度時不能使用sizeof(p) / sizeof(int),因為 p 只是一個指向 int 型別的指標,編譯器並不知道它指向的到底是一個整數還是一系列整數(陣列)。
所以 sizeof(p) 求得的是 p 這個指標變數本身所佔用的位元組數,而不是整個陣列佔用的位元組數。也就是說,根據陣列指標不能逆推出整個陣列元素的個數,以及陣列從**開始、到**結束等資訊。
15樓:匿名使用者
#include
void print(int *p, int len)}int main()
//我暈,竟然不採納的。
c語言指標什麼時候加星號什麼時候不加
1 宣告及定義一個指標時,需要用 表示識別符號是一個指標。比如int p 定義一個內指標,p是int 型別,這裡的容 主要說明變數是指標型別。2 作為間接訪問運算子 int a 2 int p a printf d n p,p 以上面的例子來說 p 是指標,是一個地址,它是int 型別。p 是指標所...
C語言到底什麼時候用指標什麼時候用變數
1.需要改變實參的時候,只能用指標.2.傳遞大型結構並且 只讀 其元素的時候,因為大型結構通過值傳遞,需要拷貝其每個元素,這樣效率太低.3.需要遍歷陣列或頻繁引用其元素時,這樣效率比使用下標高.4.動態分配空間時,必須使用指標.5.傳遞陣列時,必須使用指標.6.函式返回指標時,比如fopen 這是經...
英文在什麼時候使用斜體英文在什麼時候使用斜體
補充樓上bai的 1.非品牌的du 交通工具的名zhi字,比如dao 泰坦尼克 這艘船的名內字 titanic 需要斜體寫,福特車容 ford 不用斜體 2.非英語的外國詞彙 像 etc.的全寫 是 拉丁語 et cetera,這裡 et cetera 要斜體 3.個別強調的詞,斜體。e.g.i r...