小编yet*_*mer的帖子

当地址不是字对齐时,在C中将char*地址转换为int*时会发生什么?

我正在运行这段代码来更好地理解指针.

void foo(void)
{
    int a[4] = {0, 1, 2, 3};

    printf("a[0]:%d, a[1]:%d, a[2]:%d, a[3]:%d\n", a[0], a[1], a[2], a[3]);

    int *c;

    c = a + 1;
    c = (int *)((char*) c + 1);
    *c = 10;

    printf("c:%p, c+1:%p\n", c, c+1);
    printf("a:%p, a1:%p, a2:%p, a3:%p\n", a, a+1, a+2, a+3);

    printf("a[0]:%d, a[1]:%d, a[2]:%d, a[3]:%d\n", a[0], a[1], a[2], a[3]);

    printf("c[0]:%d, c[1]:%d\n", *c, *(c+1));

}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

a[0]:0, a[1]:1, a[2]:2, a[3]:3
c:0xbfca1515, c+1:0xbfca1519
a:0xbfca1510, a1:0xbfca1514, a2:0xbfca1518, a3:0xbfca151c
a[0]:0, a[1]:2561, a[2]:0, a[3]:3
c[0]:10, c[1]:50331648
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下[1]现在是2561吗?

我明白当我们这样做时: …

c

2
推荐指数
1
解决办法
99
查看次数

标签 统计

c ×1