c语言指针怎样理解

chara,*pa//这里是定义变量和指针变量吗?a=10//把10赋予apa=&a//a变量的地址编号赋予pa*pa=20//这里怎么理解?printf(“%d”,a)... char  a,*pa //这里是定义变量和指针变量吗?
a=10 //把10赋予a
pa=&a //a变量的地址编号赋予pa
*pa=20 //这里怎么理解?
printf( “%d”, a) //输出什么?
展开
 我来答
野人无事不言L
2016-04-21 · TA获得超过1414万个赞
知道顶级答主
回答量:2242万
采纳率:0%
帮助的人:152.7亿
展开全部
cpu自己有运算器和寄存器,通过总线与存储器件相连,在执行运算时, 需要将数据冲存储器件上面将参与运算的数据读入,运算完成后再送出到 存储区。那么cpu读入时需要访问存储器件的某个单元,需要指定这个单元 的编号,我们管这个编号叫存储地址。 比如:int a[10],*p; p=&a[3];a就是一个拥有10个整型数据的数据区 的首地址,变量p是存放地址的,称为指针型变量,赋值时需要取相应存储 区的地址,p=&a[3];就是取数组a的第4个单元的地址给p,那么p就拿到了 这个单元的地址,*p=5;就相当于a[3]=5;的操作,p++;后p指针就指向a[4]。 在操作大块数据时,一般记录首地址(数组指针),然后根据首地址再加 上偏移量来访问整个数据,在你程序中写a[3]时,计算机就会取a数组对应 的首地址再加3个整型偏移量来访问相应数据。用指针p访问a数组的好处 是,不用每次计算a加多少偏移访问数据,而是使p指向某数据后可以p++ 或p--来访问前一个或后一个数据。 注意: 1.指针存放地址用,不是存储实际数据的,它是用来找数的,在 程序中要注意这点,往往出问题的是,指针还没有赋值就用来操作,或 用指针来存放数据,如:int *p=15,s[10]={ 0,15,{0} };的 p指针赋值有问题,这样计算机会把15当成地址存放到p变量中,以后用 *p访问得到的数据就不是你想要的数据了。(应该类似:p=s+1; *p=15;) 2.指针访问数据区一般需要程序来控制不要越界,比如定义了10个单元 的数据区,你不能让指针超出这10个单元的范围,否则得到的数据就是 不靠谱的。 3.指针的定义只是开设了可以访问数据区或数组的变量,数据区和数组 需要你的程序另行开设,然后把数据区或数组的某个单元的地址赋值给 指针变量,不要认定义了能访问数组的指针,数组就定义好了。 4.指针存放的地址最好不要用来与其他地址比较,除非你能确认地址比 较的结果肯定是你想要的。 5.举例来说,int a[10],*p=a;中a和p都是指针(地址),但a和p是不同的 在编译器眼中,a是一个数据区的首地址,是一个标记,你程序中使用a 时,编译器会知道用数据区的首地址来替换操作,而p是你自己程序开 设的变量,可以在程序中操作比如p++; p=a;等,但作为记号的a就不能 在程序中操作了,如a++; a=p;就是错的了。 6.子程序如果参数是指针型的,这个参数由子程序开设的指针型临时 变量存储,这个临时变量可以进行操作,但不会返回给调用者的指针型 变量。 如:int a[10],*p; int f(int *s) { s++; } main() { p=a; f(p); } s再怎么加减都不会影响p。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式