C语言之指针操作
存儲屬性
靜態存儲屬性,棧(動態存儲屬性)
靜態存儲屬性:變量在定義時候就分配好空間
棧變量:變量在使用時分配空間,使用后釋放空間
判斷標準:
? ? 靜態存儲屬性變量:全局變量
? ? 局部變量,若有static修飾,則是靜態存儲屬性;
? ? ? ? ? ? ? 若沒有static修飾,則是棧變量
二維數組初始化
? ?static int ?array[3][4] = {{1,2,3,4},{4,5,6,7},{3,4,6,9}};
也可以初始化部分值
? ? static int array[3][4] = {{1},{3},{4}};
也可以對全部數組初始化,但不指定第一維的長度,而第二維的長度必須指定
? ?static int array[][4] = {1,2,3,4,5,6,7,8};
?int a[5]
?a ?數組名:數組的首元素的地址,即a[0]的地址
?&a 數組的地址
?*&a == a這兩者是相等的
?公式:
? ?數組地址 = &數組首元素地址
? ?數組首元素地址 = *數組地址
? ? a ? ? ? ? ? ?&a ? ? ? ?數值上大小是相等的,但含義不同
? ? a+1 ? ? ? ? ?&a+1 ? ? ?這兩個不等,a+1相當于加了一個元素,即為a[1]的地址,&a+1是加了一個數組
? ? 二維數組
? ? int b[5][2] ? ?看成是由5個一維數組組成的數組
? ? 數組名:數組首元素的地址
? ? b:數組首元素地址,即表示第0個一個數組地址
? ? b[0][0] ? ? ?**b這兩者等價 *(*b+0) ? ? *b表示第0個一維數組地址
? ? b[0][1] ? ? ? ?*(*(b+0)+1)
? ? b[i][j] ? ? ? ? *(*(b+i)+j) ? (b+i)第i個數組首元素的地址,*(b+i)+j第i個數組的第j個元素的地址,*(*(b+i)+j)為b[i][j]
? ? b != ?&b[0][0]
? ? b == &&b[0][0]
? ? *b == &b[0][0]
? ? b[0] 相當于 ? int x[2]中的x,第0個一維數組中首元素地址即第0個元素的地址
? ? b[0] == &b[0][0]
? ? 公式:
? ? ? ? 數組地址 == &數組名 = &數組首元素地址
? ? ? ? 數組首元素地址 == *數組地址
? ? ? ? 二維數組地址法:
? ? ? ? int b[5][2]
? ? ? ? 可以看成是有5個一維數組組成的數組
? ? ? ? ? ?數組名 b: 數組首元素地址
? ? ? ? ? ?數組首元素 ? ? ----由兩個int型變量組成的一維數組,即一維數組的地址
? ? ? ? ? ?**b =*&b[0][0] = b[0][0]
? ? ? ? ? ?*b = *&&b[0][0] ? ? ? ? ? ? ? ? *b表示一維數組中第0個元素的地址
? ? ? ? ? ?*b+1 ?= &b[0][1]
? ? ? ? ? ?*(*b+1) == b[0][1]
? ? ? ? ? ?*(b+i)+j ?= &b[i][j]
靜態存儲屬性,棧(動態存儲屬性)
靜態存儲屬性:變量在定義時候就分配好空間
棧變量:變量在使用時分配空間,使用后釋放空間
判斷標準:
? ? 靜態存儲屬性變量:全局變量
? ? 局部變量,若有static修飾,則是靜態存儲屬性;
? ? ? ? ? ? ? 若沒有static修飾,則是棧變量
二維數組初始化
? ?static int ?array[3][4] = {{1,2,3,4},{4,5,6,7},{3,4,6,9}};
也可以初始化部分值
? ? static int array[3][4] = {{1},{3},{4}};
也可以對全部數組初始化,但不指定第一維的長度,而第二維的長度必須指定
? ?static int array[][4] = {1,2,3,4,5,6,7,8};
?int a[5]
?a ?數組名:數組的首元素的地址,即a[0]的地址
?&a 數組的地址
?*&a == a這兩者是相等的
?公式:
? ?數組地址 = &數組首元素地址
? ?數組首元素地址 = *數組地址
? ? a ? ? ? ? ? ?&a ? ? ? ?數值上大小是相等的,但含義不同
? ? a+1 ? ? ? ? ?&a+1 ? ? ?這兩個不等,a+1相當于加了一個元素,即為a[1]的地址,&a+1是加了一個數組
? ? 二維數組
? ? int b[5][2] ? ?看成是由5個一維數組組成的數組
? ? 數組名:數組首元素的地址
? ? b:數組首元素地址,即表示第0個一個數組地址
? ? b[0][0] ? ? ?**b這兩者等價 *(*b+0) ? ? *b表示第0個一維數組地址
? ? b[0][1] ? ? ? ?*(*(b+0)+1)
? ? b[i][j] ? ? ? ? *(*(b+i)+j) ? (b+i)第i個數組首元素的地址,*(b+i)+j第i個數組的第j個元素的地址,*(*(b+i)+j)為b[i][j]
? ? b != ?&b[0][0]
? ? b == &&b[0][0]
? ? *b == &b[0][0]
? ? b[0] 相當于 ? int x[2]中的x,第0個一維數組中首元素地址即第0個元素的地址
? ? b[0] == &b[0][0]
? ? 公式:
? ? ? ? 數組地址 == &數組名 = &數組首元素地址
? ? ? ? 數組首元素地址 == *數組地址
? ? ? ? 二維數組地址法:
? ? ? ? int b[5][2]
? ? ? ? 可以看成是有5個一維數組組成的數組
? ? ? ? ? ?數組名 b: 數組首元素地址
? ? ? ? ? ?數組首元素 ? ? ----由兩個int型變量組成的一維數組,即一維數組的地址
? ? ? ? ? ?**b =*&b[0][0] = b[0][0]
? ? ? ? ? ?*b = *&&b[0][0] ? ? ? ? ? ? ? ? *b表示一維數組中第0個元素的地址
? ? ? ? ? ?*b+1 ?= &b[0][1]
? ? ? ? ? ?*(*b+1) == b[0][1]
? ? ? ? ? ?*(b+i)+j ?= &b[i][j]
? ? ? ? ? ?*(*(b+i)+j ) = b[i][j] ?= *(b[i]+j)
總結
- 上一篇: VI编辑器的操作模式
- 下一篇: C语言之字符串处理函数