数组中的矛盾指针

标签 c arrays pointers

我在 C 中遇到了一些“奇怪”的行为,至少是我没有预料到的。考虑以下代码行:

int arrayB[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
printf("%d\n", (arrayB+1)[1]);

这很好用,因为 (arrayB + 1)[1] 转换为 *(arrayB+1 +1) 这是 arrayB< 的第三个元素(因此它按预期打印 3)

但是,考虑下面的代码,我在其中初始化了一个名为 arrayA 的二维数组(有 5 个数组,每组 10 个整数,每个 {0, 1, 2, 3, 4, 5, 6 , 7, 8, 9})

int ** arrayA = malloc(sizeof(int *) * 5);
for (int i = 0; i < 5; i++) {
    arrayA[i] = malloc(sizeof(int) * 10);
    for (int j = 0; j < 10; j++) {
        arrayA[i][j] = j;
    }
}

printf("%d\n", *(arrayA+1)[2]);

此代码不会引发警告,它声称 *(arrayA+1)[2] 是一个 int 类型。然而..它似乎应该是(因为数组下标比取消引用运算符具有更高的优先级),*(arrayA+1)[2] 转换为 *(arrayA+3)int * 类型,因为 arrayAint ** 更进一步的是,这是允许的:

*(arrayA+1)[2] = 1;

但这怎么可能呢?好像我正在将 int 分配给 int *... 这通常会引发警告。

最佳答案

it seems that ... *(arrayA+1)[2] translates to *(arrayA+3)

不,你丢了一个**(arrayA+1)[2] 翻译成**(arrayA+3),确实是一个int

关于数组中的矛盾指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36588166/

相关文章:

c - C 中 for 循环中的 Pow() 函数

python - 我怎样才能在python中获得-ve数的无符号大小

Javascript - 数组索引仅返回未定义

c++ - 指针引用可能检测到内存泄漏?

c++ - 用指针翻转数组

c - sizeof float (3.0) 与 (3.0f)

c - 在C中传输文件

arrays - 配置单元-从文件中将值插入数组(逗号和分号分隔)

c - 指向自定义地址

c++ - 我的 bst 实现有什么问题吗?