2016-11-10 58 views
-1

请帮我用简单的程序吗?我是begginer,我的英语不好,很难理解。 :/在我的简易程序中,“数值既不是数组也不是指针也不是矢量”

方案:

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'); 
    } 
} 

,能不能请你帮我解决这个问题?非常感谢你。

+1

do'void tisk_pole(char P [3] [3]){'改为。 –

回答

1

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

P1具有类型char [3][3] - 即,char的3元素阵列的3元素阵列。因此,在tisk_poleP参数的声明必须是下列之一:

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

void tisk_pole(char P[][3]) 

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

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

在函数调用

tisk_pole(P1); 

表达P1已键入 “3元素数组3-元件的阵列的char”(char [3][3]);因为它不是sizeof或一元运算符&的操作数,所以它被转换成“指向3元素数组的指针”(char (*)[3])的表达式并且计算为P1的第一个元素的地址。这意味着tisk_pole收到一个指针值,而不是一个数组值。

函数参数声明T a[N]T a[],并T *a都意味着同样的事情 - 他们都宣称a作为指针T,而不是T数组。不过,这是只有在函数参数声明中为true。

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

相关问题