你都*p2了。知道*p2什么意思不。。。
取p2地址的值。但是上一行printf("%d\n",p1);感觉理解不够透彻。
搞清楚 * 和 & 。
& : 取地址
* :取地址中的值
这个我清楚,那printf("%d\n",p1); 打印出来的结果是1怎么理解。
注意,int* a = &b;int* 是一个符号,叫做申明 一个int类型的指针。
double * 表示申明一个double类型的指针。
而且它的值只能是指针类型,你怎么能把num值类型赋值给他。至少应该强制类型转换(int *)。
& 表示取地址符,表示取一个数的地址,而* 表示取一个地址的数。
他们两个和 int & ,int * 是没有关系的。
打印地址要使用 “\p”.
这段代码是完全没有问题的,编译执行最后得出来的结果都是1,看来你对指针的理解也不怎么样。
@睡着的糖葫芦: 笑死我了. int * = num; 这样的代码还敢说没问题。
把一个int 类型 赋值给一个指针类型,你老师这么教你的?
@胖乎乎的小奶油: 提问的代码都没看清楚,你眼神真心不行。*p1,*p2被你吃了。看来你的水平并不能解答我的疑惑,装逼也要有点水平啊,你就自己编译运行就知道代码有没有问题了,你就知道是不是打自己脸。
@睡着的糖葫芦: 在你还没上高中的时候,我就已经用C语言做开发了。
@胖乎乎的小奶油: 不管你怎么说,我这边是完全没问题的,64位系统,编译器gcc,打印出来的就是2个1,你怎么解释,说了半天你就是不自己试试。
@睡着的糖葫芦: 第一个1 是0x0000 0001
@胖乎乎的小奶油: 那真不清楚怎么回事了
指针本质上是内存的寻址编号,即所谓的内存地址。32位系统可寻址是4个字节,64位是8个字节,你可以理解为指针就是一个int类型的数。
*p1=1,意思是指针p1为内存中地址为1,你打印p1当然就是1了,当然你打印*p1可能会报错,该内存一般被系统保护,而且一般内存的起始地址不会是1
*p2=&num,意思是p2的值是num的地址,num的地址是自动分配的,你打印*p2当然就是num的值了