博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言指针选讲
阅读量:237 次
发布时间:2019-03-01

本文共 1617 字,大约阅读时间需要 5 分钟。

二维数组在内存中地址实际是一维连续存储的。

#include 
int 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); }}

指针的类型的作用

#include 
int main(){ int data = 0x12345678; int *pd = &data; printf("%x\n", *pd); printf("%x\n", *(short*)pd); printf("%x\n", *(char*)pd);}

二维数组的偏移量遍历

#include 
int 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的含义

#include 
int 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

#include 
int main(){ int arr[10]; int *pHead = &arr[0]; int *pTail = &arr[9]; printf("%d\n", pTail - pHead);}

指针偏移量访问一维数组

下面程序中先执行++操作,在执行解引用操作。

#include 
int 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++); }}

字符指针数组

下面代码定义了一个字符指针数组,用字符指针数组来访问字符串数组,相当于二维字符串数组。

#include 
int 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

#include 
int 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/

你可能感兴趣的文章