指针是个存着地址的变量,因为我们每定义一个变量,内存就会给他分配空间,那么每个变量必须会有一个存储他的地宏尺方,我们称为地址,他指向谁,里面就存着谁的地址。如题*p=a;
此时p里面岩轮存的是a的地址(记住这一点),还可以用取地址符&获取变量的地址,如&a;表示的是a的地址。变量的值可以用*号获取。* 后面加一个地址,表示这个地址里面的数值(也记住,很重要)
定义3个原则
A * 后面只能跟地址, *p 表示参数的值
B &后面只能跟变量。 &a 表示参数a的地址
C ’=‘ 是赋值,为了程序的稳定,我们默认只允许同类型的参数进行赋值(若不同类也会赋值,但是执行结果会出错)
就是说,只允许,指针地址赋值给指针地址,变量值赋值给变量值。了解这些,就可以分析了:
int *p,*q; q=p; //对的,因为p,q都是指针,可以相互赋值 依据 A,C原则
int a,*p,*q; p=q=&a;//对的,p,q指针表示地址,根据B原则,&a也是地址,因此可以进行赋值
int a,*p,*q; q=&a; p=*q;//蔽枣高错的,q =&a 是对的,但是p =*q 是错的,根据原则A,C,*q是值,p是地址,与原则C冲突
int a=20,*p; *p=a;// 对的,他们都表示值
int a=b=0,*p; p=&a; b=*p;//对的,p = &a 原则BC ,b = *p 原则AC
int a=20,*p,*q=&a; *p=*q;// 对的,初始时q得到a的地址,*p和*q都是表示值,符合原则C
int a=20,*p,*q=&a; p=q;//对的,原则BC
int p,*q; q=&p;// 对的,原则BC
祝你进步,指针自己琢磨下,会明白的!
首先指针最好不要做赋值运算,int *p,*q; q=p;p是一个地址就是把p的地址赋给指针p,两轮高个值都是16进制数,但是这样做的话两个指针指的是同一个地址并且没有被在其磨桐拦地址位之内放int型的整数;
int a,*p,*q; p=q=&a;是在上面的基础上对其地址位置的内存放置了一个a(,但是这个数是多少是,是垃圾数据);
int a,*p,*q; q=&a; p=*q;在指针q和指针p所指位置上的内存中放置的是同一个a(int数,随机的)*与&是逆运算,假如p是指针,瞎胡*p代表的就是p所指内存中储存的数,a代表一个int型的数,那么&a代表的就是这个数所指的地址值;p等价&(*p);
int a=20,*p; *p=a;*p在这里代表的是一个间接变量,你可以吧*p当成一个变量,这个变量比普通变量好用……
int a=b=0,*p; p=&a; b=*p;同上的道理,对于=号是从右往左运算的所以b=*p并不知道*p的值,*p的值是随机的;
int a=20,*p,*q=&a; *p=*q;这个玩的是具体的int型值,对于p和q所指的地址并不做任何操作,都是随机的地址;
int a=20,*p,*q=&a; p=q;同上面不一样的是p与q指向了同一个地址,实际上是把q指向的地址赋给了p;
int p,*q; q=&p;这个就不用说了吧。
加上一句,虽然*p很好用,但是开始时由于其指向不明确,是随机地址,滥用的话会造成内存管理混乱,建议在用指针前最好用malloc和new函数开辟动态内存。
*
int *p,*q; q=p;
int a,*p,*q; p=q=&a;
(上面的赋值是正确的)
int a,*p,*q; q=&a; p=*q;
int a=20,*p; *p=a;
(p=*q不对,应哗旁局宽该是p=q,*p=a;不对,p根本没有指向任何位置。)
int a=b=0,*p; p=&a; b=*p;
int a=20,*p,*q=&a; *p=*q;
(a=b=0这种初始化方式不对,*p=*q不对,p根本没有指乱腊橡向任何位置)
int a=20,*p,*q=&a; p=q;
int p,*q; q=&p;
(这组也是正确的)
int *p,*q; q=p; //指针世慧赋值给指针允许
int a,*p,*q; p=q=&a; //&a错误,指针只需要变量a的首地址,故应该写成p=q=a
int a,*p,*q; q=&a; p=*q; //&a错误同上条 p=*q错误 不同类型赋值
int a=20,*p; *p=a; /搜此答/*p=a错误,应该是p=a. 非法给多重指针赋值
int a=b=0,*p; p=&a; b=*p; //&a错误,b末定义
int a=20,*p,*q=&a; *p=*q; // *q=&a错误
int a=20,*p,*q=&a; p=q; //*q=&a错误
int p,*q; q=&p; //q=&p错误,扒绝同第二条
请分清“指针本此信辩身的值”和“指针指向的地址中的值”这两者的区别。指针本身的值就是地森缺址。
int a = 2;
int *p = &a;
//p = 100; //试图将指针本身的值修改为100,即令指针p指向内存地址100的位置坦碰,这是未定义行为
*p = 100; //将指针p指向的地址中的值修改为100,即将a的值修改为100