gpt4 book ai didi

c - 将指针类型转换为 &(int*) 和 (int*)& 并将其分配给某个指针变量时有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:55 31 4
gpt4 key购买 nike

如果我们有一个 void 指针,并且我们尝试为它分配某个指针变量的地址(例如,指向 int 的指针),那么语句 1 和语句 2 之间有什么区别。

对于语句 2,我得到了 lvalue error,但我没有得到这背后的原因 - ptr is lvalue only 所以为什么是否显示错误?

int a;
int *ptr =&a ;
1. void *p =(int*)&ptr;
2. void *p=&(int*)ptr;

最佳答案

根据 C99 规范的第 6.5.4 节,第 4 行,脚注 89,在线提供 here :

A cast does not yield an lvalue

当我们查看您的代码时:

int a;
int *ptr =&a ;
1. void *p =(int*)&ptr;
2. void *p=&(int*)ptr;

在情况 1 中:void 指针被分配给类型转换为 int* 的内容。这是有效的。事实上,以下陈述也是有效的:

3. void *p = (int*)123;
4. void *p = (int*)a;
5. void *p = (int*)ptr;

但在 2 的情况下:(int*)ptr 已成为右值,然后您在该右值上使用 &。它未能说明:lvalue required as unary '&' operand

对于 2.,导致问题的不是 void* 的赋值,而是右值上的运算符 &

关于c - 将指针类型转换为 &(int*) 和 (int*)& 并将其分配给某个指针变量时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876156/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com