这可能是一个愚蠢的问题,但是我对C指针的理解有一点困难,特别是在处理数组时。例如:
char ptr[100];
ptr[0]=10;
fprintf(stderr, "&ptr: %p \n ptr: %p \n*ptr: %d\n", &ptr, ptr, *ptr);
if ( &ptr == ptr ) {
fprintf(stderr, "Why?\n");
}
这怎么可能呢?'ptr'指向的地址是&ptr,而ptr的内容与&ptr相同。那么为什么*ptr = 10呢?
ptr
这个称呼不准确,因为它并不是指针,而是一个数组。 - sbi&ptr == ptr
中,ptr是左操作数中的数组(&的结果给出一个指向数组的指针)。右操作数是一个指针,它与&ptr[0]
相同。Ptr本身是一个数组,而不是一个指针。 - nosdouble x = 5;
。而ptr
只是一个数组,只有通过转换才能变成其他类型。请注意,这里的翻译并没有改变原意。 - GManNickGif (&ptr == ptr)
不是有效的 C 语言。char (*)[100]
不能隐式转换为char *
或反之。在理想的情况下,编译器会拒绝这段代码,但它可能至少会发出警告。整个问题在于,&ptr
和ptr
在 类型 上不同,而不是数值上的差异。 - R.. GitHub STOP HELPING ICE