在C linux错误中,下标值既不是数组也不是指针也不是向量

时间:2013-02-18 14:16:50

标签: c linux ubuntu

这是在C中初始化二维chars数组的代码 该数组是3X3的字符 我正在为ubuntu使用Eclipse C / C ++ IDE 当使用此功能时,GCC会输出如下错误: 下标值既不是数组也不是指针也不是向量 的 什么是错误的意思,任何人都可以帮助我,提前谢谢:)

void init(char* ptr)
{
    int i=0;
    int j=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            *ptr[i][j]=' ';
        }
    }
}

4 个答案:

答案 0 :(得分:0)

应定义为char** ptr init()的参数。

答案 1 :(得分:0)

你只在init中传递一个指针。如果是3x3,那么您需要将签名更改为:

 void init(char **ptr){ ... }

访问指针时,可以:

ptr[i][j] = '';

(*(ptr[i])+j) = '';

(*(*(ptr+i))+j) = '';

答案 2 :(得分:0)

ptrpointerchar而不是char[][]。所以你应该使用**ptrchar (*ptr)[size_of_2nd_dimension]

或简单:

void init(char (*ptr)[size2]) <-----
{
    int i=0;
    int j=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            ptr[i][j]=' ';
        }
    }
}

答案 3 :(得分:0)

该函数无法猜测数组的大小,但由于它是c,您可以自己进行操作(2个选项):

void initA(char* ptr, int totalSize)
{
    int i=0;
    int j=0;
    for(i=0;i<totalSize;i++)
    {
        *ptr[i]=' ';
    }
}

void initB(char* ptr, int sizeX, int sizeY)
{
    int i=0;
    int j=0;
    for(i=0;i<sizeX;i++)
    {
        for(j=0;j<sizeY;j++)
        {
            *ptr[(i * sizeY) + j]=' ';
        }
    }
}