我一直认为 *&p = p = &*p 在 C 中。我尝试了以下代码:
#include <stdio.h>
#include <stdlib.h>
char a[] = "programming";
char *ap = &a[4];
int main(void)
{
printf("%x %x %x\n", ap, &*(ap), *&(ap)); /* line 13 */
printf("%x %x %x\n\n", ap+1, &*(ap+1), *&(ap+1)); /* line 14 */
}
第一个 printf 行(第 13 行)给了我地址:
40b0a8 40b0a8 40b0a8
这与预期的相同。但是当我添加第二行 printf 时,Borland 抱怨道:
“first.c”:E2027 必须在第 14 行的函数 main 中获取内存位置的地址
我期待得到:
40b0a9 40b0a9 40b0a9。
似乎第 14 行的表达式 *&(ap+1) 是这里的罪魁祸首。我认为第 14 行的所有三个指针表达式都是等价的。为什么我想错了?
第二个相关问题:线
char *ap = a;
指向数组 a 的第一个元素。我用了
char *ap = &a[4];
指向数组 a 的第 5 个元素。
是表达式
char *ap = a;
和表达式一样
char *ap = &a[0];
最后一个表达式是否比前一个表达式更冗长?
非常感谢...