指標和二維陣列的關係有點繞,需要細細分析。通過**的方式,列印位址去理解。
1.定義乙個指向一維陣列的資料的指標
格式:資料型別 * 指標變數名稱 = 陣列名稱[一維陣列的下標]
2..定義乙個指標的陣列:
格式:資料型別 * 指標變數名稱[指標個數]
3.定義乙個指向一維陣列的指標
格式:資料型別 (*指標名稱)[所指向的一維陣列的元素個數]
運算:指標 + 整數 == 指標中的值 + (所指向資料型別的長度 * 整數)
注意點在**中:
void test(),};//num[0][0],num[0][1],num[1][0],num[1][1]四個數
//int *p = nums; p是乙個指向整形數的指標 nums是乙個指向一維陣列的指標 雖然位址相同,但是指向的型別不同
int *p = nums[0];//定義指標p指向一維陣列的位址,是指向乙個資料
printf("%p\n",p);//p指向的位址0x7fff5fbff780
printf("%p\n",nums);//p指向的位址0x7fff5fbff780
printf("%p\n",nums[0]);//p指向的位址0x7fff5fbff780 前面都是相同的
printf("%p\n",nums[1]);//p指向的位址0x7fff5fbff788 第二個一維陣列的位址
for (int i = 0; i < 4; i++)
}void test2();
*p[0] = 10;
*p[1] = 20;
*p[2] = 30;
*(p[0] - 1) = 30;//其實是指向p[1]的位址
printf("%p,%p,%p\n",p[0],p[1],p[2]);
//0x7fff5fbff744,0x7fff5fbff740,0x7fff5fbff73c從大得位址開始分配(注意)
//跟陣列先分配一整塊記憶體位址,再從小分配不一樣
printf("%d,%d,%d\n",a,b,c);
}void test3(),};
int (*p)[2] = nums;
printf("%p\n",p);//位址0x7fff5fbff780
printf("%p\n",p + 1);//位址0x7fff5fbff788
printf("%d\n",*p[0]);//列印1
printf("%d\n",*p[1]);//列印3
printf("%d\n",p[0][1]);//列印2 這邊不需要*操作符
printf("%p\n",nums);//位址0x7fff5fbff780
printf("%p\n",nums+1);//位址0x7fff5fbff788
printf("%p\n",nums[1]);//位址0x7fff5fbff788
}int main(int argc, const char * argv) ,};
int *p = nums[0];
for (int i = 0; i < sizeof(nums) / sizeof(int); i++)
return 0;
}
指標系列六(指標與二維陣列)
指標與二維陣列 int array 4 5 printf sizeof int d n sizeof int printf array p n array printf array 1 p n array 1 上面程式證明 array 1,位址加了20,每乙個整形四個位元組,相當於跨越了五個位元組 ...
c 返回二維陣列 C的指標(三)指標和二維陣列
對於二維陣列array 4 5 array應理解為是包含四個元素的陣列,每個元素是乙個一維陣列,它們有五個元素。例 int mat 3 4 陣列含義 考慮到陣列名代表陣列第乙個元素的位址 mat mat 0 mat 0 mat 0 0 matmat 0 1指向陣列mat 0 的第二個元素,是mat ...
C 二維陣列與指標
從鍵盤輸入r行c列二維整型陣列,找出每一行的次最大值並顯示出來。要求 1 r和c為符號常量 2 二維陣列是動態申請生成的 3 每一行的次最大值是利用單獨的函式呼叫獲得的 4 對陣列元素的訪問以及函式引數宣告等都是利用指標實現的。include stdio.h include iostream inc...