Ayu*_*oel 0 c arrays pointers pointer-arithmetic
我跑的时候
char * a = "string";
char * b = a;
while (*a != '\0')
printf("%p %c\n", *(a), *(a++));
printf("%p\n", *(b+2));
Run Code Online (Sandbox Code Playgroud)
输出看起来像
0x73 s
0x74 t
0x72 r
0x69 i
0x6e n
0x67 g
0x72
Run Code Online (Sandbox Code Playgroud)
此外,程序如何确定(b + 2)位于0x72.我认为它只会将2添加到b的起始地址,在本例中为0x73.
编辑:这不是未指定行为的情况.正如答案中所解释的那样,我错误地将值传递给地址格式说明符而不是指针本身.
尝试
printf("%p %c\n", (void *)a, *a);
a++;
Run Code Online (Sandbox Code Playgroud)
并且高兴,连续的元素实际上是连续的!
您的代码出了什么问题:
*(a)你传递给当前字符printf的值而不是它的地址,然后打印出来printf就好像它是一个指针; 你看到的十六进制值是字符的字符代码"string"而不是它们的地址(请注意,printf从格式字符串的预期传递给不同的参数是未定义的行为,它产生一些合理的输出是偶然的);printf也受同样的错误影响;a第二个参数之前或之后是否递增printf.char *而不是const char *指向字符串文字的指针;| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |