使用指针的3d数组



我是C编程新手。目前我试图学习3d数组使用指针。下面是我正在调试的一个程序。有人能解释一下下面给出的两个程序的区别吗?

code1:

#include <stdio.h>
int main()
{
    int a;
    int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};
    printf("%dn",*(*(*(d +1)+1)+1));
    if(*(*(*(d +1)+1)+1) <(a= sizeof( int )))
        puts(" u got it ");
    else
        puts (" but wrong");
    return 0;
}

code2:

#include <stdio.h>
int main()
{
    int a;
    int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};
    if(*(*(*(d +1)+1)+1) <(sizeof( int )))
        puts(" u got it ");
    else
        puts (" but wrong");
    return 0;
}

在第一个代码中,我得到[…不完整…]

int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};

初始化项没有完全带括号,但在这种情况下,初始化项应用于内存中数组的下一个元素,因此这将分配d[0][0][0] = 1, d[0][0][1] = -2, d[0][1][0] = -3等。

printf("%dn",*(*(*(d +1)+1)+1));

充满星星的东西是d[1][1][1]的一种模糊的书写方式。X[Y]的定义为*(X+Y)

(a= sizeof( int )))

赋值表达式的类型是左操作数的类型。第一个程序执行(int)-1 < (int)4。第二个程序执行(int)-1 < (size_t)4。(假设你的int值是4字节大)。

在第一种情况下,这是true。在第二种情况下,它是类型不匹配。必须在进行比较之前修复类型不匹配。C规则规定,在这种情况下,有符号类型被转换为无符号类型,给出(size_t)-1 < (size_t)4。因为(size_t)-1实际上是size_t可能的最大值,所以这个比较是false

这基本上是一个整数类型比较问题。第一个程序比较signed int(-1)和signed int (a),第二个程序比较signed int(-1)和unsigned int (sizeof())。整数提升发生在第二种情况下,其中signed int(-1)被转换为unsigned int (-1) -> SIZE_MAX。有关类型比较的更多细节,请查看线程,C中比较不同数据类型的一般规则是什么?

相关内容

  • 没有找到相关文章

最新更新