C:指针=变量和指针=变量有什么区别?
问题描述:
我正在阅读的教科书解释说,指针是保存另一个变量起始地址的变量,而且它们是用指向的数据类型定义的。为什么你可以指定一个指针作为变量的地址呢?或者,如果省略“&”,而不是地址,如果这是指针的定义方式,它是否总是保存地址?C:指针=变量和指针=变量有什么区别?
答
ptr
是实际的指针,而*ptr
是无论它指向什么,所以*ptr=&var
没有任何意义,除非它是一个指针的指针。它要么是ptr=&var
要么是*ptr=var
如果你真的想给一个指针指定一个变量,那么可以通过强制转换。这编译,但我看不出有什么好理由做这样的事情:
#include <stdio.h>
main()
{
int var=4;
int *ptr;
ptr = (int *)var;
printf("%d\n", *ptr);
}
行为是未定义的。当我跑它时,它隔断了。
答
C是很久以前设计的,一些设计选择是在不再流行的情况下进行的。当函数原型是可选的,并且模糊性不能从上下文中解析出来时,运算符的地址需要将对象的地址而不是其值传递给函数。为了一致性,使用相同的语法进行赋值。
然而要注意你提出的语法简化,可以不再区分这些情况:
void *p;
void *q = &p; // make q point to the pointer p
void *q = p; // set q to the value of p
还有其他潜在的语法简化:
的
.
和->
运营商为对象,指针引用可以合并成一个运营商。的
*
语法间接函数调用:(*fun)()
是reduncdant作为fun()
是完全等价的。(请注意,您可以编写(****fun)()
太)
为什么要使用C++标记为一个C的问题? – 2017-07-02 15:44:58
我以为这两个使用非常相似的语法,并建议。 :/ – Pixel
您需要阅读[好书](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –