指针算子何时、如何评估?

问题描述 投票:0回答:1

我一直认为指针运算是理所当然的。但有些时候我很不明白,编译器到底是怎么做的,什么时候会被评估?考虑一下下面的程序。

#include <stdio.h>
#include <stdlib.h>

int prng(void);

int main()
{
    int x = prng(); // Pseudo Random Generator.

    int (*a)[x];

    a = malloc(sizeof(int) * 2 * x);    // Allocate 2 rows of x columned vectors

    printf("%p %p\n", a, a + 1);    // How and When does a + 1 evaluate ?

    return 0;
}

我几乎可以肯定,编译器(或者说运行时的程序)不会要求CPU添加... a1 像一般的整数一样来评价 a+1. 那么编译器(或程序)是如何设法获得正确的地址的呢?

c pointers variable-length-array
1个回答
0
投票

那么,编译器(或程序)是如何设法获得正确的地址的呢?

a + 1 是在运行时评估的。

在运行时, *ax * sizeof(int).

总和是由加到 a, x int的到它。


注。

int (*a)[x]; 是UB当 x <= 0.

a + 1 当分配失败时为UB。

© www.soinside.com 2019 - 2024. All rights reserved.