【问题标题】:Pointer to statically defined two-dimensional array [closed]指向静态定义的二维数组的指针
【发布时间】:2013-06-12 09:41:56
【问题描述】:

代码(使用gcc -std=c99编译)...

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

typedef int mytype[8][8];

int main(void)
{
    mytype CB;
    for (int r=0; r<8; r++) {
        for (int c=0; c<8; c++) {
            CB[r][c] = 5;
        }
    }

    mytype *CB2 = &CB;

    for (int r=0; r<8; r++) {
        for (int c=0; c<8; c++) {
            printf("%d ",*CB2[r][c]);
        }
        printf("\n");
    }

    return 0;
}

stdout 上打印错误数据(只有第一行的数据是正确的),这应该是所有5。我发现,其他数组项的指针在内存中有些偏移,但我不明白为什么。

我希望目的很明显:在第一个循环中设置数组CB 的内容,然后在第二个循环中打印出来。这只是模型 - 指针的存在是因为我需要它。

我做错了什么?

【问题讨论】:

  • 在尝试使用运算符之前,值得阅读运算符优先级,这个问题非常适合“过于本地化”的类别。

标签: c arrays pointers c99 multidimensional-array


【解决方案1】:

Operator precedence表示你需要改

printf("%d ",*CB2[r][c]);

printf("%d ",(*CB2)[r][c]);

数组下标运算符[] 的优先级高于指针取消引用运算符*,因此您的代码被评估为*(CB2[r][c])

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多