C 035 指標與二維陣列

2021-07-08 14:05:26 字數 1611 閱讀 5070

指標和二維陣列的關係有點繞,需要細細分析。通過**的方式,列印位址去理解。

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...