【问题标题】:Accessing a 2D array in C but no column index在 C 中访问二维数组但没有列索引
【发布时间】:2022-01-04 13:08:29
【问题描述】:

如果我有一个二维数组

int A[3][2] = { {3,4}, {5,6}, {0,-5} }

如果我尝试打印元素 A[1] 会得到什么结果?会是垃圾价值吗?还是会变成逻辑错误?

【问题讨论】:

  • 技术上 C 没有多维数组。 A 所拥有的是int数组 数组。所以A[1] 是一个数组(包含两个int 值)。如果编译器会抱怨或者是逻辑错误取决于上下文,那么您对数组的处理方式。
  • 所以如果我尝试打印 A[1] 的值,结果会是什么?垃圾?
  • @Someprogrammerdude,从技术上讲,C 没有负数,只有 一元减号 后跟数字文字
  • @TerryTan,这取决于您如何尝试打印它。有一些方法可以产生完全有效、定义明确的结果,也有一些方法会产生未定义的行为。
  • 另请注意,产生未定义行为的程序并不一定意味着它会产生您认为是“垃圾”的输出。

标签: arrays c indexing compiler-errors garbage


【解决方案1】:

假设你做了类似的事情

printf("%d\n", A[1]);

那将是未定义的行为。这是因为数组A[1] 将衰减为指向其第一个元素的指针(即在该上下文中A[1] 将衰减为&A[1][0]),并且%d 格式说明符不适合打印指针。

然而

printf("%p\n", (void *) A[1]);

会很好,因为%p 是打印void * 指针的正确格式说明符。


正如评论中所指出的,仅仅因为您有未定义的行为并不意味着程序会崩溃或导致它“垃圾”(即使(可能被截断的)指针在打印为十进制整数时可能看起来像那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2013-03-16
    • 2016-05-28
    • 2020-06-11
    • 2020-07-30
    • 2016-12-03
    • 2013-06-29
    相关资源
    最近更新 更多