函数调用期间指针类型不兼容

问题描述 投票:-1回答:1

我已将代码缩减为以下内容:

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

void change_data (char *data);

int main (int argc, char *argv[])
{
    char data[20] = {0};

    strcpy(data, "This is a test.");
    change_data(&data);

    exit(EXIT_SUCCESS);
}

void change_data (char *data)
{
    printf("%s\n", data);
}

我希望能够更改函数中的主变量。我认为使用&意味着发送地址而不是复制数据。但是在编译时出现以下错误:

tt.c: In function 'main':
tt.c:13:14: warning: passing argument 1 of 'change_data' from incompatible pointer type [-Wincompatible-pointer-types]
  change_data(&data);
              ^
tt.c:5:6: note: expected 'char *' but argument is of type 'char (*)[20]'
 void change_data (char *data);
      ^~~~~~~~~~~

有人能告诉我我做错了什么,因为我没有线索。 TY。

c pointers function-call
1个回答
3
投票

删除&data有类型char[20],所以指向它的指针有char (*)[20]类型。数组在需要时会衰减为指针类型,因此只需传递data就会将其作为char*传递。

© www.soinside.com 2019 - 2024. All rights reserved.