本文共 1617 字,大约阅读时间需要 5 分钟。
二维数组在内存中地址实际是一维连续存储的。
#includeint main(){ int arr[3][4] = { 1,2,3, }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%p\n", &arr[i][j]); } putchar(10); }}
指针的类型的作用
#includeint main(){ int data = 0x12345678; int *pd = &data; printf("%x\n", *pd); printf("%x\n", *(short*)pd); printf("%x\n", *(char*)pd);}
二维数组的偏移量遍历
#includeint main(){ int arr[3][4] = { 1,2,3,4, 5,6,7,8, 9,0 }; printf("%d\n", arr[1][1]); printf("%d\n", *(*(arr + 1) + 1));}
指针加1的含义
#includeint main(){ // 指针+1,加的是步长,即指针类型的大小 int *p = (int*)0x0001; int Data = 0x0001; printf("p=%#x p+1 = %#x\n", p, p + 1); printf("Data=%#x Data+1=%#x\n", Data, Data + 1); printf("(double*)p=%#x (double*)p+1 = %#x\n", (double*)p, (double*)p + 1); printf("(int)p=%#x (int)p+1=%#x\n", (int)p, (int)p+1);}
数组指针偏移
pHead 偏移9个单位+9 = pTail
所以答案是9
#includeint main(){ int arr[10]; int *pHead = &arr[0]; int *pTail = &arr[9]; printf("%d\n", pTail - pHead);}
指针偏移量访问一维数组
下面程序中先执行++操作,在执行解引用操作。
#includeint main(){ int arr[10] = { 1,2,3,4,5,6,7,8,9,11 }; int *pa = arr; for (int i = 0; i < 10; i++) { printf("%d\n", *pa++); }}
字符指针数组
下面代码定义了一个字符指针数组,用字符指针数组来访问字符串数组,相当于二维字符串数组。
#includeint main(){ const char* pArr[] = { "China","America","Canada","Japan" }; for (int i = 0; i < 4; i++) { printf("%p %s\n", pArr[i], pArr[i]); }}
指针数组本质上是一个数组,pArr中存放了四个指针,所以sizeof(pArr)=16
#includeint main(){ const char* pArr[] = { "China","America","Canada","Japan" }; for (int i = 0; i < 4; i++) { printf("%p %s\n", pArr[i], pArr[i]); } printf("%d\n", sizeof(pArr));}
转载地址:http://kiev.baihongyu.com/