指標的本質是變數,其記憶體中儲存的值是另乙個變數或常量的記憶體位址。
int array[5];
int matrix[3][3];
int* pa = array;
int* pm = matrix;
合法,第乙個為標準陣列的定義,第二個為二維陣列的定義,第三個為指向陣列的指標,第四個為指向二維陣列的指標。
問題:(1)array代表陣列首元素的位址,那麼matrix代表什麼?(2)array和&array的位址值相同,但意義不同,那麼它們所代表的型別相同嗎?c語言中的陣列有自己特定的型別,由元素型別和陣列大小共同決定;如:int array[5] 的型別為 int[5]。
c語言中通過typedef為陣列型別重新命名:
typedef
type
(name)[size];
例如:
-陣列型別:
typedef int(aint5)[5];
typedef float(afloat10)[10];
-陣列定義:
aint5 iarray;
afloat10 farray;
(1) 陣列指標用於指向乙個陣列;
(2)陣列名是陣列首元素的起始位址,但並不是陣列的起始位址;
(3)通過取位址符&作用於陣列名可以得到陣列的起始位址;
(4)可通過陣列型別定義陣列指標:arraytype* pointer;
(5) 也可以直接定義: type(*pointer)[n];
pointer 為陣列指標變數名;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); // pc + 1 ==> (unsigned int )pc + 1 * sizeof(*pc) ==> (unsigned int)pc + 9
return
0;
}
輸出結果:
20, 20
0.000000
1.000000
2.000000
3.000000
4.000000
5.000000
6.000000
7.000000
8.000000
9.000000
0xbfef0163, 0xbfef016c, 0xbfef0167
(1)指標陣列是乙個普通的陣列(2)指標陣列中每乙個元素為乙個指標(3) 指標陣列的定義:type* parray[n];
type*:為陣列中每個元素的型別(帶有*,可知是乙個指標型別)
parray:為陣列名
n:陣列大小
0;}輸出結果:
4
-1
(1) 陣列的型別由元素型別和陣列大小共同決定;
(2)陣列指標是乙個指標,指向對應型別的陣列;陣列指標遵循指標運算法則;
(3)指標陣列是乙個陣列,其中每個元素都是指標;指標陣列擁有c語言陣列的各種特性。
C 32 陣列指標和指標陣列分析
思考 下面這些宣告合法嗎?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 陣列定義 ai...
指標和陣列分析(上)
陣列是一段連續的記憶體空間 陣列的空間大小為sizeof arrary type arrary size 陣列名可看做指向陣列第乙個元素的常量指標 a 1的意義是什麼?結果是什麼?指標運算的意義是什麼?結果又是什麼?1 include 2 intmain 3 5int p null 6 printf...
C語言學習筆記19 陣列指標和指標陣列分析
在c語言中 c語言中通過typedef為陣列型別重新命名 typedef int aint5 5 重新命名 aint5 iarray 定義 typedef float afloat10 10 重新命名 afloat10 farray 定義 注 pointer為陣列指標變數名 type為指向的陣列的元...