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]
的工作方式与您期望的完全相同。dovoid tisk_pole(char p[3][3]){
取而代之。
void tisk_pole( char (*P)[3] )
tisk_pole( P1 );