思考: 下面這些宣告合法嗎?
int array[5];
int matrix[3][3];
int* pa = array;
int* pm = matrix;
例: int array[5] 的型別為 int[5]
陣列型別:
typedef int(aint5)[5]
typedef float(afloat10)[10]
陣列定義:
aint5 iarray
afloat10 ifloat
type 為指向的陣列的元素型別
n 為指向的陣列的大小
#include typedef int(aint5)[5];
typedef float(afloat10)[10];
typedef char(achar9)[9];
int main()
for(i=0; i<10; i++)
printf("%p, %p, %p\n", &carray, pc+1, pcw + 1);
return 0;
}
編譯輸出:
char(*pcw)[4] = carray; ==> warning: initialization from incompatible pointer type
執行輸出:
20, 20
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
0xbff4e833, 0xbff4e83c, 0xbff4e837
分析:char(*pcw)[4] = carray; 陣列指標型別使用 char 型別指標初始化,編譯器告警
type* 為陣列中每個元素的型別
parray 為陣列名
n 為陣列大小
#include #include #define dim(a) (sizeof(a) / sizeof(*a))
int lookup_keyword(const char* key, const char* table, const int size)
{ int ret = -1;
int i = 0;
for(i=0; i
int lookup_keyword(const char* key, const char** table, const int size)
但這樣是不直觀的,降低了程式的可讀性
32 陣列指標和指標陣列分析
指標的本質是變數,其記憶體中儲存的值是另乙個變數或常量的記憶體位址。int array 5 int matrix 3 3 int pa array int pm matrix 合法,第乙個為標準陣列的定義,第二個為二維陣列的定義,第三個為指向陣列的指標,第四個為指向二維陣列的指標。問題 1 arra...
C語言學習筆記19 陣列指標和指標陣列分析
在c語言中 c語言中通過typedef為陣列型別重新命名 typedef int aint5 5 重新命名 aint5 iarray 定義 typedef float afloat10 10 重新命名 afloat10 farray 定義 注 pointer為陣列指標變數名 type為指向的陣列的元...
指標和陣列分析(上)
陣列是一段連續的記憶體空間 陣列的空間大小為sizeof arrary type arrary size 陣列名可看做指向陣列第乙個元素的常量指標 a 1的意義是什麼?結果是什麼?指標運算的意義是什麼?結果又是什麼?1 include 2 intmain 3 5int p null 6 printf...