c - 下面的代码有什么问题?如何纠正这个问题?

标签 c multidimensional-array

如何返回静态多维字符数组?

#include<stdio.h>
#include<conio.h>

#define SIZE 3

char ** MyFunction(void)
{
    static char arr[SIZE][SIZE]={
                                    {'A', 'B', 'C'},
                                    {'D', 'E', 'F'},
                                    {'G', 'H', 'I'}
                                };
    return arr;
}

void main(void)
{
    char ** arr1 = NULL;
    int i=0;
    int j=0;

    arr1 = MyFunction();

    for(i=0 ; i<SIZE ; i++)
    {
        for(j=0 ; j<SIZE ; j++)
        {
            printf("%c, ", arr1[i][j]);
        }

        printf("\n");
    }

    getch();
}

最佳答案

首先,arr 不能是 char**。它是一个地址,但不是指针的地址——它是 char[SIZE] 的地址。

我总是发现通过使用 typedef 分割维度来处理这些问题更容易。

#define SIZE 3 
typedef char ROW[SIZE];   // a ROW type is an array of chars

ROW* MyFunction(void) 
{ 
     static ROW arr[SIZE]={  // arr is an array of ROW objects 
                                    {'A', 'B', 'C'}, 
                                    {'D', 'E', 'F'}, 
                                    {'G', 'H', 'I'} 
                                }; 
    return arr; 
} 

void main(void) 
{ 
    ROW* arr1 = NULL;
    // etc...

关于c - 下面的代码有什么问题?如何纠正这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806900/

相关文章:

c - 遍历 C 中的多个数组

c - 树的实现——C语言

c - 使用 CreateFileMapping 时出错 - C

c - 需要帮助使我的代码高效

python - 如何从元组迭代创建 numpy.ndarray

c++ - 三角形二维数组比矩形数组占用更多内存

c - 获取自己的蓝牙地址

c - C 编程中指针字符串不接受输入

python - 在 Python 中旋转二维数组

c++ - 无法解释以下 C++ 片段的输出