看到關於這兩個的介紹,以前沒注意到這個問題。
char a[max]; /*array of max characters*/
char *p = a; /*p
為指向陣列的指標
*/ char *pa = &a; /*
該語句是不正確的,
pa的型別為
'char *'
,而&a
的型別為
'char (*)[max]』*/
char (*pb)[max] = &a; /*
該語句是正確的,
pb的型別為
'char (*)[max]'*/
#include#define array_len 6
int main();
char *p=a;
char *pa=&a;
char (*point_to_str)[array_len];
point_to_str=&a;
printf("%p\n%p\n%p\n%p\n%p\n%p\n%p\n",a,&a,&a[5],p,&pa, &point_to_str);
printf("\n\n %p %p %p %p\n",a,&a[0],a+1,&a+1);
printf("%s\n%s\n", p, point_to_str);
}
0x7fff1c1107b0
0x7fff1c1107b0
0x7fff1c1107b5
0x7fff1c1107b0
0x7fff1c1107a8
0x7fff1c1107a0
0x400665
0x7fff1c1107b0 0x7fff1c1107b0 0x7fff1c1107b1 0x7fff1c1107b6
a和&a的值是一樣的,但是型別不一樣,乙個是char的指標 char*,乙個是整個陣列的指標
char (*)[array_len]
。可以用+1體現不一樣之處
&a[0]+1 == (int)(&a[0]) + sizeof(a[0])
&a+1 == (int)(&a) + sizeof(a)
Array和List的區別
array和list都屬於順序表。因為list是乙個鍊錶,所以我需要從第乙個元素開始逐個next到所需索引的元素。這是乙個耗時的過程。陣列必須要在初始化時分配固定的大小,比如說int a new int 3 如果我們僅僅寫int a new int 編譯器就會無情地給我們報錯。但是list由於空間不...
Array和List的異同
array和list的異同 array的建立格式是 型別 eg string array new string 5 可以在建立時限定長度,但在後面使用中不可以更改。直接賦值 不適用於二維陣列 引用賦值。只能選其一,且不能重複賦值。可以放基本型別資料和物件。list建立格式是 型別 泛型 eg lis...
Array和List的轉換
呼叫list的toarray 方法,可以直接規定引數陣列大小為1,如果不夠,方法將自動建立合適大小的陣列 listlist new arraylist list.add aaa list.add bbb string s list.toarray new string 1 for string ss...