int * p;
关于这句话的解释:
C Primer Plus 6th:p是一个指针,*p是int类型
郝斌C教程:p是变量的名字,int * 表示p变量存放的是int类型变量的地址
谭浩强:指针变量前面的"*"表示该变量的类型为指针型变量。指针变量名是p,而不是*p。
我的问题是,这句话 到底应该将int * 看作一个整体,还是将*p看作一个整体?
C Primer Plus似乎是将*p看作一个整体
郝斌和谭浩强似乎都是讲int*看作一个整体(郝斌的教程用书就是谭c),视频也多次强调p是int*类型的。
如果将int *看作一个整体,那么int * p,q;的含义实际是声明一个指针变量p和整形变量q。(这可能和赋值表达式语句的结合律是从右往左有关系。)
如果将*p看作是一个整体,那么取地址的时候应写成p = &i; 而不是*p = &i;(这也是谭c的解释)
到底如何理解 这行语句?能否从更底层来解释这句话?比如汇编或计算机原理这种层面。
这个问题有点牛角尖,希望可以得到想要的答案,
谢谢
我把我的理解跟你说下吧。
int *p; //在定义(或者声明)指针变量时,变量p前面的“*”只是用来说明变量p是个指针变量而不是一个整型变量,int是指这个指针变量指向的是int类型的内存地址,指针本质上就是地址,任何类型的指针变量在内存中都是占用4个字节的存储空间的(即32位二进制数),既然指针变量存放的地址值都是32位的,那为什么还要区分类型呢?这是为了方便指针变量的运算。举例说明,
int *pn; //定义了一个指向整型的指针变量那么,从上面的例子,我们就可以知道,指针变量前面加上类型,是为了方便指向该类型的变量的内存空间,那么就可以通过该类型的指针变量来访问它所指向的内存空间的数据。
int*类型的含义是:变量p是指针变量名,而不是*p这个整体,*在定义指针变量的时候只是起说明的作用,int*不是一个整体,这点你要记住,说p是int*型指针,是为了方便而简写的形式,这里的*只起一个标记说明的作用而已,每定义一个int类型的指针变量,前面都要加*。
int *p,*q; //定义了两个指向整型变量的指针变量
int *p,q; //p是指针变量,而q是普通的变量
希望对你理解有所帮助吧。