关于指针的一些问题
Posted shellingfordly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于指针的一些问题相关的知识,希望对你有一定的参考价值。
int a,*p=&a; printf("&a---%d\np---%d\n&p---%d\n*&p---%d\n&*p---%d\n*p---%d",&a,p,&p,*&p,&*p,*p); if(a)printf("aa");
/*输出结果
&a---6356788
p---6356788
&p---6356784
*&p---6356788
&*p---6356788
*p---3022848aa请按任意键继续. . .
*/
- &a:表示a的地址
- p:表示a的地址
- &*p/*&p:*p表示a,&*p=&a表示a的地址,可能是由于&和*的优先级一样,所以&*p和*&p都是取得a的地址
- &p:指针p自己的地址
- *p/a:a的值,无值时似乎是随机地址
- if(a):无值时为真
#include<stdio.h> struct st int num; int s; ; int main(void) int d=4; struct st a,*p=&a; //*p=d; //报错 p->num=d; //ok printf("%d",*p); //4
我以为*p=&a;和*p指向数组一样,可以用*p直接对第一个成员进行赋值,但是我发现并不可以;
我绝对可能是数据类型的原因,数组时因为每一个元素都时int类型,所以*p指向int数组类型的第一个元素也是int类型,可以直接赋值;
我的理解:而结构体中,*p指向结构体类型数据a,虽然地址是指向第一个成员,但是a是结构体类型,num才是int类型,所以要用p->num获取num在对其赋值。
以上是关于关于指针的一些问题的主要内容,如果未能解决你的问题,请参考以下文章