概述
一、地址
不管是指针还是数组定义后一定要初始化啊!!!!!!!!!!!!!!!!
//打印地址的方法 %p
int a=0;
printf("a=%dn",*(&a));//&代表取地址,*代表取一个地址里的值(内容)
int a=3;
int *p=&a;
printf("a的地址:%pn",&a);
printf("a=%dn",*((int *)0x000000000064FE14));//(int *)将后面的16进制数转换为地址,
//*代表取一个地址里的值(内容)
二、指针变量的定义
int a=10;
int *p;//或 int *p;
//初始化
int *p=&a;
p=&a;//*p=&a是万万不可的
星号(*)只有在定义一个指针变量时才是指针的标识符,其他情况都是
取内容的运算符!!!
三、数组的访问方式
int a[3]={1,2,3};
int *p=&a[0]; //数组首元素地址=数组地址=数组名
//1.直接通过数组访问
for(int i=0;i<3;i++){
printf("%dn",a[i]);
}
//2.利用指针访问
for(int i=0;i<3;i++){
printf("%dn",*p++); //指针分类型,指针++根据类型的不同偏移值不同
}
p=a;//数组首元素地址=数组地址=数组名
//3.数组指针当数组名来用,
for(int i=0;i<3;i++){
printf("%dn",p[i]);
}
四、为什么要用指针?
1.可以在你想要的地址的地方写入数据,这也是c语言指针的强大之处,Java做不到;
//ARM架构 裸机编程 ARM驱动
int *p=(int *)0x000000000064FE1C;
*p=1;//这里不知道为什么我的DevC++会报段错误
printf("%p,%dn",p,*p);
//但是一般要加volatile,其作用是提升程序正确度,但会牺牲一点的效率,
//详情:https://blog.csdn.net/joy2017/article/details/83583984
volatile int *p=(volatile int *)0x000000000064FE1C;
int *p=(int *)0x000000000064FE1C;
*p=1;
printf("%p,%dn",p,*p);
最后
以上就是斯文背包为你收集整理的C语言——指针的全部内容,希望文章能够帮你解决C语言——指针所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复