Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C &引用;值既不是数组,也不是指针,也不是向量;在我的简易程序中_C_Arrays_Pointers_Vector - Fatal编程技术网

C &引用;值既不是数组,也不是指针,也不是向量;在我的简易程序中

C &引用;值既不是数组,也不是指针,也不是向量;在我的简易程序中,c,arrays,pointers,vector,C,Arrays,Pointers,Vector,你能帮我做一下简易程序吗?我是乞丐,我的英语不好,很难理解/ 节目: void tisk_pole (P); int main() { char P1[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}}; tisk_pole(P1); return 0; } void tisk_pole (P){ int i, j; for (i = 0; i < 3; i++){ for (j

你能帮我做一下简易程序吗?我是乞丐,我的英语不好,很难理解/

节目:

void tisk_pole (P);

int main()
{
    char P1[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}};
    tisk_pole(P1);
    return 0;
}

void tisk_pole (P){
    int i, j;

    for (i = 0; i < 3; i++){
        for (j = 0; j < 3; j++)
            printf("%c", P[i][j]);  //HERE IS PROBLEM -> value is neither array nor pointer nor vector
        putchar('\n');
    }
}
void tisk_pole(P);
int main()
{
字符P1[3][3]={'1','2','3'},{'4','5','6'},{'7','8','9'};
tisk_极(P1);
返回0;
}
空心铁杆(P){
int i,j;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++)
printf(“%c”,P[i][j]);//这里有一个问题->值既不是数组,也不是指针,也不是向量
putchar('\n');
}
}

拜托,你能帮我解决这个问题吗?非常感谢。

您缺少参数
p
的类型声明

void tisk_pole(char P[3][3]) {
    int i, j;

    for (i = 0; i < 3; i++){
        for (j = 0; j < 3; j++)
            printf("%c", P[i][j]); 
        putchar('\n');
    }
}
void tisk_pole(字符P[3][3]){
int i,j;
对于(i=0;i<3;i++){
对于(j=0;j<3;j++)
printf(“%c”,P[i][j]);
putchar('\n');
}
}

有关编译器如何处理没有类型的参数,请参见。

函数定义中的
p
参数的类型必须与函数调用中的参数
P1
的类型匹配

P1
具有类型
char[3][3]
——即
char
的三元素数组中的三元素数组。因此,
tisk_pole
P
参数的声明必须是以下之一:

void tisk_pole( char P[3][3] )

除非它是
sizeof
或一元
&
运算符的操作数,或者是用于初始化声明中字符数组的字符串文字,否则“T的N元素数组”类型的表达式将被转换(“衰减”)为“指向
T
的指针”类型的表达式,表达式的值将是数组第一个元素的地址

在函数调用中

tisk_pole( P1 );
表达式
P1
具有类型“char的三元素数组的三元素数组”(
char[3][3]
);由于它不是
sizeof
或一元
&
运算符的操作数,因此它被转换为类型为“指向
char
的三元素数组的指针”(
char(*)[3]
)的表达式,并计算为
P1
的第一个元素的地址。这意味着
tisk_pole
接收指针值,而不是数组值

在函数参数声明中,
ta[N]
ta[]
ta*a
都表示相同的意思-它们都将
a
声明为指向
T
的指针,而不是
T
的数组。不过,这仅在函数参数声明中是正确的

您可以像在数组上一样在指针上使用
[]
下标运算符,因此
p[i][j]
的工作方式与您期望的完全相同。

do
void tisk_pole(char p[3][3]){
取而代之。
void tisk_pole( char (*P)[3] )
tisk_pole( P1 );