C语言指针操作主要分为三步
第一步 : 所有变量都保存在内存中,我们打印一下变量的存储地址
第二步:所有变量都可以保存某些值,接着赋值并打印*/
第三步:使用指针:1取值 2
举例说明:
void test()
{
int a;
int *p;
char *t;
/*第一步 : 所有变量都保存在内存中,我们打印一下变量的存储地址*/
printf("&a =%p\n",&a); //打印结果是a的地址
printf("p=%p\n",p); //打印结果是p的地址
printf("t =%p\n",t); // 打印结果是t的地址
/*第二步:所有变量都可以保存某些值,接着赋值并打印*/
a = 0x12345678;
p= &a; //把a地址赋给p
t = (char *)&a; //因为指针t是char型的,所以要转换类型
printf("a =0x%x\n",a); //打印结果是0x12345678
printf("p =%p\n",p); //打印a的地址
printf("t =%p\n",t); //打印a的地址
/*第三步:使用指针:1)取值 2)移动指针*/
printf("*p=0x%x\n",*p); //打印结果*p=0x12345678.
//解释:*是取值,p现在存放的是a的地址,*p是以p里存放的内容(a的地址)
//当做地址继续寻找取出a地址里的内容
printf("t=%p\t",t); printf("*t =0x%x\n",*t); t=t+1;//打印结果*t=0x12.
//解释:同*p解释一致,不过*t是char型,它只能取出一个字节的内容
printf("t=%p\t",t); printf("*t =0x%x\n",*t); t=t+1;//打印结果*t=0x34
printf("t=%p\t",t); printf("*t =0x%x\n",*t); t=t+1;//打印结果*t=0x56
printf("t =%p\t",t); printf("*t =0x%x\n",*t); // 打印结果*t=0x78
printf("//=================\n");
}
运行结果
用图说明
移动指针
&变量,目的:获得变量在内存中的地址
返回: 变量在内存中的起始地址
结论:指针变量所存储的内容是所指向的变量在内存中的起始地址。
指针对连续空间进行操作时:
1)取值
2)移动指针
指针加数值的问题
抽象T *t; t是一个指针变量,里面装的是一个地址值。
经过t=t+n(数值),t的值增加了n*sizeof(T)个字节
char ca[3]={'A','B','C'};
char *pc = ca;
pc是指向字符数组的字符指针,pc就是数组首元素的地址,pc=&a[0]
char *pc="abc";
pc是指向字符串的字符指针,pc就是字符串"abc"的首字符'a'的地址