【问题标题】:Passing pointer to string, incompatible pointer type将指针传递给字符串,不兼容的指针类型
【发布时间】:2014-09-10 14:26:37
【问题描述】:

所以我确信这个问题已经回答了很多次了,但是我无法理解如何解决我的问题。我对包含我的警告生成代码的程序进行了 sn-p:

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

inputData(int size, char *storage[size])
{
    int iterator = -1;

    do {
        iterator++;
        *storage[iterator] = getchar();
    } while (*storage[iterator] != '\n' && iterator < size);
}

main()
{
    char name[30];

    inputData(30, name);
}

警告信息:

$ gcc text.c text.c:在函数“main”中: text.c:18:5: 警告:从不兼容的指针类型传递“inputData”的参数 2 [默认启用] inputData(30, name); ^ text.c:4:1: 注意:预期为“char **”,但参数类型为“char *” inputData(int size, char *storage[size])

编辑:

好的,所以我设法使用了一些语法并解决了我的问题。我仍然不介意从比我更有知识的人那里听到为什么需要这样做。这是我所做的更改:

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

inputData(int size, char *storage) // changed to point to the string itself 
{
    int iterator = -1;

    do {
        iterator++;
        storage[iterator] = getchar(); // changed from pointer to string
    } while (storage[iterator] != '\n'); // same as above
}

main()
{
    char name[30];

    inputData(30, name);

    printf("%s", name); // added for verification
}

【问题讨论】:

  • inputData()内部,代码应该有3个理由停止:1)getchar()返回'\n'2)getchar()返回EOF3)没有更多空间。

标签: c string pointers arguments


【解决方案1】:

数组名称在传递给函数时转换为指向其第一个元素的指针。 name 将转换为&amp;name[0]指向char 类型的指针),这是数组name 的第一个元素的地址。因此,函数的第二个参数必须是 指向char 类型的指针。

char *storage[size] 在声明为函数参数时等效于char **storage。因此,将char *storage[size] 更改为char *storage

【讨论】:

    【解决方案2】:

    将数组传递给函数时,可以通过两种方式进行:
    考虑以下程序:-

    int  main()
    {
       int array[10];
       function_call(array); // an array is always passed by reference, i.e. a pointer   
       //code                // to base address of the array is passed.
       return 0;
    } 
    

    方法一:

    void function_call(int array[])
    {
      //code
    }
    

    方法二:

    void function_call(int *array)
    {
      //code
    }
    

    这两种方法的唯一区别是语法,否则两者相同。
    值得一提的是,在 C 语言中,数组不是按值传递,而是按
    参考。
    您可能会发现以下链接很有用:-

    http://stackoverflow.com/questions/4774456/pass-an-array-to-a-function-by-value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多