【问题标题】:Difference between char array[100] and char *array when calling functions?调用函数时 char array[100] 和 char *array 的区别?
【发布时间】:2017-12-23 02:13:59
【问题描述】:

我想知道为什么这段代码在char tab[100] 下工作得很好,但如果我使用char *tab 就不行? fgets 函数将char* 数组作为参数,对吗?

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 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("<(^w^)>\n");
    }
    else if (str[i] != str[j])
    {
        printf("My word is not a Palindrome !\n");
        return printf("<(X.X)>\n");
    }
    else 
    {
        return Palindrome(str, i + 1, j - 1);
    }
}

【问题讨论】:

  • char tab 东西在哪里?
  • 它将与char *tab= malloc(100);一起使用
  • “不起作用” 怎么样?你得到了什么错误?这个char *tab 在哪里声明?你有没有费心为它分配内存?更加努力地提出一个有用的问题。
  • 你是什么意思“但是如果我使用 char *tab 就不起作用”?你分配你的字符串了吗?
  • 阅读 C 教科书中处理指针的章节。

标签: c arrays pointers recursion palindrome


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2018-04-29
    • 2013-12-19
    • 2012-03-10
    • 2012-06-03
    • 2020-05-06
    相关资源
    最近更新 更多