#include <stdio.h> int main() { int a[3][4] = { 00,01,02,03, 10,11,12,13, 20,21,22,23 }; //---------------------------------------下面2种等价-------------------------------------------- printf("a 指向一维数组a[0],即0行首地址:%p\n", a ); printf("a+1 指向一维数组a[1],即1行首地址:%p\n", a+1); int(*p)[4] = a; //指向一个长度为4的一维数组的指针 (行指针) printf("p 指向一维数组a[0],即0行首地址:%p\n", p); printf("p+1 指向一维数组a[1],即1行首地址:%p\n", p + 1); /* 地址:00000000002BFB78 地址:00000000002BFB88 两个地址相差 10 即16字节, 正好 一行元素的空间 4*4 */ //------------------------------------下面3种等价----------------------------------------------- printf(" *a a[0][0]首地址:%p\n", *a); printf(" *a + 1 a[0][1]首地址:%p\n", *a + 1); printf("&a[0][0] a[0][0]首地址:%p\n", &a[0][0]); printf("&a[0][0]+1 a[0][1]首地址:%p\n", &a[0][0] + 1); printf("a[0] a[0][0]首地址:%p\n", a[0]); printf("a[0]+1 a[0][1]首地址:%p\n", a[0]+1); /* 地址:00000000002BFB78 地址:00000000002BFB7C 两个地址相差 4 字节, 正好 一个元素的空间 */ //-----------------------------------指针剖析--------------------------------------------------- int * arr1[5]; //指针数组 int ** p1 = arr1; //指针的指针 int arr2[3][5]; //元素是数组的数组 int (*p2)[5] = arr2; //数组指针 (行指针) int arr3[5];
int *p3 = arr3; //普通整形指针
int arr4[5]; int(*p4)[5] =& arr4; //数组指针 (行指针) return 0; }
转载请注明原文地址: https://www.6miu.com/read-34306.html