调用函数时char数组和char *数组之间的区别?

我想知道为什么这个代码与char tab[100]工作正常,但如果我使用char *tab不起作用? fgets函数将char*数组作为参数对吗?

  #include  #include  #include  Int Palindrome(char* str, int i, int j); int main() { char tab[100]; printf("Enter your string : \n"); fgets(tab, 100, stdin); int j = strlen(tab); printf("%d\n", Palindrome(tab, 0, j - 2)); return 0; } int Palindrome(char* str, int i, int j) { if (i >= j) { printf("My word is a Palindrome !\n"); return printf("\n"); } else if (str[i] != str[j]) { printf("My word is not a Palindrome !\n"); return printf("\n"); } else { return Palindrome(str, i + 1, j - 1); } } 

如果“不工作”,您可能意味着您会收到一些严重的错误报告,例如分段错误。

char tab[100]char *tab之间的区别在于第一个分配了存储而第二个没有分配。 当您使用数组作为参数调用函数时,编译器会将指针传递给数组的第一个元素,因此对于被调用的函数,它不会看到是否使用数组参数调用它或用指针参数。

所以让你的程序使用char *tab; 您必须首先为此指针分配存储,例如使用char *tab=malloc(100); 现在已经分配了有效存储(并且指针现在指向它),您可以使用此tab作为参数调用您的函数。