Tag: 地址

C预处理器是否删除了“&*”的实例?

我正在玩gcc并尝试以下代码: int A = 42; int *B = &A; int *C = &*B; 和C == &A ,如预期的那样。 但是当我尝试: int *B = NULL; int *C = &*B; 原来C == NULL ,没有段错误。 所以&*B在取得地址之前实际上并没有取消引用B 我的猜测是预处理器在它们甚至到达编译器之前就剥离了&*和*&实例,因为它们互相否定,但我找不到任何文档来validation这是标准C还是特定于编译器。 预处理器是否会剥离&*和*& ,我可以从任何给定的编译器中获得这种行为吗?

解除引用的指针构造的地址

在unqlite c库中,我找到了以下代码: pObj = jx9VmReserveMemObj(&(*pVm),&nIdx); 其中pVm是: typedef struct jx9_vm jx9_vm; jx9_vm *pVm 和被调用的函数声明为: jx9_value * jx9VmReserveMemObj(jx9_vm *, sxu32 *); 什么构造&(*pVm)用于调用而不仅仅是pVm ? &(*pVm)相当于pVm吗?

“地址”(&)被忽略的数组/地址是gcc吗?

我是入门编程课程的助教,有些学生犯了这种错误: char name[20]; scanf(“%s”,&name); 这并不奇怪,因为他们正在学习……令人惊讶的是,除了gcc警告之外,代码也起作用(至少这部分)。 我一直在努力理解,并编写了以下代码: void foo(int *v1, int *v2) { if (v1 == v2) printf(“Both pointers are the same\n”); else printf(“They are not the same\n”); } int main() { int test[50]; foo(&test, test); if (&test == test) printf(“Both pointers are the same\n”); else printf(“They are not the same\n”); } 编译和执行: $ gcc test.c […]

为什么scanf必须采用运算符的地址

正如标题所说,我总是想知道为什么scanf必须采用运算符(&)的address of 。