首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印时获取类似于数组值的内存地址(C编程)

打印时获取类似于数组值的内存地址(C编程)
EN

Stack Overflow用户
提问于 2022-01-25 16:55:08
回答 2查看 59关注 0票数 1

我正在尝试创建8x8数组,但是当我打印该数组时,在7个元素之后,我没有得到在创建数组时分配的确切值。我的数组如下

代码语言:javascript
复制
#include <stdio.h>
int main() {
    int puzzle[8][8] = {
    //   0 1 2 3 4 5 6 7 8 
        {0,0,2,0,4,0,5,9,3},//0
        {7,0,0,3,1,0,4,0,8},//1
        {4,0,0,8,0,5,1,0,2},//2
        {8,3,0,2,0,0,0,0,0},//3
        {0,9,6,0,0,0,3,5,0},//4
        {0,0,0,0,0,4,0,8,6},//5
        {3,0,1,5,0,9,0,0,7},//6
        {6,0,5,0,2,8,0,0,1},//7
        {0,4,0,0,7,0,6,0,0} //8
    }; 
for (int i = 0; i < 9; ++i)
  {
    for (int j = 0; j < 9; ++j)
    {
      printf("\n puzzle[%d][%d] = %d",i,j,puzzle[i][j]);
    }
  }


    return 0;
}

我得到的输出是

代码语言:javascript
复制
 puzzle[0][0] = 0
     puzzle[0][1] = 0
     puzzle[0][2] = 2
     puzzle[0][3] = 0
     puzzle[0][4] = 4
     puzzle[0][5] = 0
     puzzle[0][6] = 5
     puzzle[0][7] = 9
     puzzle[0][8] = 7
     puzzle[1][0] = 7
     puzzle[1][1] = 0
     puzzle[1][2] = 0
     puzzle[1][3] = 3
     puzzle[1][4] = 1
     puzzle[1][5] = 0
     puzzle[1][6] = 4
     puzzle[1][7] = 0
     puzzle[1][8] = 4
     puzzle[2][0] = 4
    puzzle[2][1] = 0
     puzzle[2][2] = 0
     puzzle[2][3] = 8
     puzzle[2][4] = 0
     puzzle[2][5] = 5
     puzzle[2][6] = 1
     puzzle[2][7] = 0
     puzzle[2][8] = 8
     puzzle[3][0] = 8
     puzzle[3][1] = 3
     puzzle[3][2] = 0
     puzzle[3][3] = 2
     puzzle[3][4] = 0
     puzzle[3][5] = 0
     puzzle[3][6] = 0
     puzzle[3][7] = 0
     puzzle[3][8] = 0
     puzzle[4][0] = 0
     puzzle[4][1] = 9
     puzzle[4][2] = 6
     puzzle[4][3] = 0
     puzzle[4][4] = 0
     puzzle[4][5] = 0
     puzzle[4][6] = 3
     puzzle[4][7] = 5
     puzzle[4][8] = 0
     puzzle[5][0] = 0
     puzzle[5][1] = 0
     puzzle[5][2] = 0
     puzzle[5][3] = 0
     puzzle[5][4] = 0
     puzzle[5][5] = 4
     puzzle[5][6] = 0
     puzzle[5][7] = 8
     puzzle[5][8] = 3
     puzzle[6][0] = 3
     puzzle[6][1] = 0
     puzzle[6][2] = 1
     puzzle[6][3] = 5
     puzzle[6][4] = 0
     puzzle[6][5] = 9
     puzzle[6][6] = 0
     puzzle[6][7] = 0
     puzzle[6][8] = 6
     puzzle[7][0] = 6
     puzzle[7][1] = 0
     puzzle[7][2] = 5
     puzzle[7][3] = 0
     puzzle[7][4] = 2
     puzzle[7][5] = 8
     puzzle[7][6] = 0
     puzzle[7][7] = 0
     puzzle[7][8] = -445142480
     puzzle[8][0] = -445142480
     puzzle[8][1] = 32765
     puzzle[8][2] = 480800256
     puzzle[8][3] = -129200335
     puzzle[8][4] = 0
     puzzle[8][5] = 0
     puzzle[8][6] = -2108403533
     puzzle[8][7] = 32522
     puzzle[8][8] = -2106304992

正如你所看到的,我并没有得到我分配给第七位的确切值。我得到的输出看起来像地址或ids。我不明白为什么会发生这种情况,这是一个问题,还是我的代码中有任何错误?

EN

回答 2

Stack Overflow用户

发布于 2022-01-25 17:15:01

正如您已经了解到的,数组元素从零开始被索引。因此,当定义大小为n arr[n]的数组时,只能在这个数组中保存n元素(0到n-1)。多维数组也是如此。

在您的示例中,您只定义了一个大小为8x8的数组,该数组只能容纳64个元素。但是您正在尝试将9x9 81元素分配给您的数组。因此,只有索引puzzle[0][0]puzzle[7][7]是可访问的。

票数 1
EN

Stack Overflow用户

发布于 2022-01-25 17:33:06

编译器将发出用于此初始化的消息。

代码语言:javascript
复制
int puzzle[8][8] = {
//   0 1 2 3 4 5 6 7 8 
    {0,0,2,0,4,0,5,9,3},//0
    {7,0,0,3,1,0,4,0,8},//1
    {4,0,0,8,0,5,1,0,2},//2
    {8,3,0,2,0,0,0,0,0},//3
    {0,9,6,0,0,0,3,5,0},//4
    {0,0,0,0,0,4,0,8,6},//5
    {3,0,1,5,0,9,0,0,7},//6
    {6,0,5,0,2,8,0,0,1},//7
    {0,4,0,0,7,0,6,0,0} //8
};

因为数组的元素是带有8元素的数组,但是您为每个元素提供了9初始化程序。

如果数组有N元素,那么有效的索引范围是[0, N)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70852626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档