int *p,*q;
p=q;
p=*q;
这两个代码的含义和区别在哪?
先要理解地址和数据,你可以想象有很多盒子,每个盒子有对应的号码,那个号码叫做“地址”,而盒子里放的东西叫做“数据”。
上面就段理解了,*p和p的区别就不难解释了。
p是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“ * ”是解引用操作符,你可以把它理解成打开盒子,p就是打开p号盒子,取出里面的数据。
简单来说,你记住,p存放的是地址,而p是让程序去那个地址取出数据。
https://blog.csdn.net/weixin_43115440/article/details/93475460
指针,分为地址和数据,p就是一个指针变量。
p就是打开p号盒子,拿出里面的东西
p存放的就是地址,只有知道这个地址,才能让程序通过指针进行运行等等
另有详细介绍:
https://blog.csdn.net/soonfly/article/details/51131141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166122181316782391810835%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166122181316782391810835&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-51131141-null-null.142^v42^pc_rank_34_ecpm25,185^v2^control&utm_term=%E6%8C%87%E9%92%88&spm=1018.2226.3001.4187
int *p,*q; //定义了两个整形指针变量,但未被赋值,所以是野指针
p=q; // 将 指针变量 q 的值 赋值给 指针变量 p ,
*p=*q; // 将 指针变量 q 所指向地址空间里存储的变量值 赋值给 指针变量 p 所指向的地址空间里,这句在这里会出错,因为 p q 是野指针,未指向一个确定的地址空间。
第二行是指:把指向int型的指针变量p和指向int型的指针变量q进行赋值操作。
1、p、q都是指针,在定义的指针的时候要使用int *p,*q;
2、p=q 将q指向的地址赋值给p,相同类型赋值,没啥问题;
3、p=q 这里的q指得是q指针指向的地址中存放的值。
强调一点:
int q 这里的“”,意思指示q是一个指针变量。而下面的q,此处的“”是解引用操作符。
p=q一般不能直接这样写,因为q(数值类型)直接赋值给p(指针类型)会报错,可以写成p=(int *)(*q)
p=*q会存在bug的。谨慎使用。