作为一个新手,我正在解决 K&R 的指针章节中的一个问题,并且对字符指针的某些方面感到困惑,并将一个 char* 类型的数组作为函数参数传递。
我明白的字符数组衰减
前任:
void main( )
{
char a[ ] = "Howdy";
tryMe(a);
}
所以这里传递的函数参数是&a[0]
void tryMe( char* s )
{
printf("value I need: %c \n", *s);
}
所以这将是s = &a[0];
现在使用上述理解,我尝试对 char* 类型的数组执行相同的操作。具有相同的功能 tryMe(char*)
前任::
char a[ ] = "Howdy";
char b[ ] = "Doodie";
char* a1 = a;
char* b1 = b;
char* AP[ ] = { a1 , b1 };
// now to pass array AP into the function tryMe::
tryMe(AP);
这是我收到警告的地方:
警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“tryMe”的参数 1
我不确定发生了什么,但我确实通过执行以下操作使其正常工作:
改变函数定义
tryMe(char*) 到 tryMe(char**)
这很好用。
另一个有效的解决方案是:
函数定义保持不变::
无效 tryMe(char*)
但是在传递函数参数时,它如下所示:
void tryMe( char* s[ ] )
{
;
}
尽管上述这些更改按我的意愿工作,但我不知道它们为什么工作
我真的很感激任何关于这些的指导。