【发布时间】:2021-09-07 23:55:44
【问题描述】:
在下面使用this在线编译器的C代码中,当我将指针地址增加一时,实际地址增加了四。因为数据类型是int。
#include <stdio.h>
int main()
{
int my_array[3] = {0, 1, 2};
int* p_array = my_array;
printf("%p \n", p_array);
p_array = ++p_array;
printf("%p \n", p_array);
return 0;
}
编译后的输出:
0x7ffeb9ba5814
0x7ffeb9ba5818
我有两个问题:
-
是否可以使用指针直接访问/指向地址 0x7ffeb9ba5815 处的单个字节? (不使用按位运算)
-
为什么上面例子中的地址指针是6字节的,比如0x7ffeb9ba5818? (我虽然地址是 4 或 8 个字节)
【问题讨论】:
-
p_array = ++p_array;是未定义的行为。你来这里的目的是什么?增加指针? -
1.
((unsigned char *)p_array)[1] = your_value; -
p_array = ++p_array;:我认为你的意图是p_array++;。请确认。 -
@Jabberwocky 我认为他的意图只是
p_array++;或p_array += 1; -
@HamzaJadid
p_array = ++p_array是未定义的行为,请阅读:stackoverflow.com/questions/949433/…。
标签: c