函数调用期间不兼容的指针类型
Incompatible pointer type during function call
我已将我的代码缩减为以下内容:
#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.
删除 &
。 data
的类型为 char[20]
,因此指向它的指针的类型为 char (*)[20]
。数组会在需要时 衰减 为指针类型,因此只需传递 data
即可将其传递为 char*
.
我已将我的代码缩减为以下内容:
#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.
删除 &
。 data
的类型为 char[20]
,因此指向它的指针的类型为 char (*)[20]
。数组会在需要时 衰减 为指针类型,因此只需传递 data
即可将其传递为 char*
.