应该是写法造成的误解。建议写成 int* a = &b;就清楚多了。a的类型是int*,值是&b,C语言连续声明指针变量的时候又有点问题写成int* a, b, c;结果只有a是指针,b和c就是简单的整形变量了。
应该是写法造成的误解。建议写成 int* a = &b;就清楚多了。a的类型是int*,值是&b,C语言连续声明指针变量的时候又有点问题写成int* a, b, c;结果只有a是指针,b和c就是简单的整形变量了。这种时候又需要写成int *a, *b, *c;这就属于容易出错的地方了,所以定义指针的时候建议分开定义。
熟悉C语言的特性,包括他的缺点,才能在开发的过程中少挖坑少掉坑,所以C语言四大名著中有两本来讲这些问题。
C语言里边,变量声明后边的 = 符号跟赋值语句的的 = 符号含义不同。后来C++也继承了这个特性。而这可能是给题主造成困惑的核心。
int *a = &b;
实际上可以理解为
int *(a = &b); // 只是示意,当然这样写是不对的
也就是说,先把&b赋值给a,然后令 *a 的类型为 int。
所以这里 &b 是赋值给 a 而不是赋值给 *a。
不过这里就存在一个矛盾:赋值语句的 = 符号的优先级低于 * 号的,为什么这里先计算等于号后计算星号?按照运算符优先级规则,此处的 &b 应当赋值给 *a 才对。
延伸阅读:
什么是C语言?
C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。
当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。
文章标题:为什么C语言用int*a来声明指针变量,而不是int&a声明,发布者:小编,转载请注明出处:https://worktile.com/kb/p/39221