来自不兼容指针类型错误的C赋值
将整数指针传递给另一个函数时,第14行出现不兼容类型错误。谁能解释一下为什么以及如何解决这个问题来自不兼容指针类型错误的C赋值,c,function,pointers,parameter-passing,C,Function,Pointers,Parameter Passing,将整数指针传递给另一个函数时,第14行出现不兼容类型错误。谁能解释一下为什么以及如何解决这个问题 #include<stdio.h> int check_similar(int *pa, int *pb); int main() { int a[5], b[5], i; for (i=0; i<5; i++){ scanf("%d", &a[i]); } for (i=0; i<5; i++){
#include<stdio.h>
int check_similar(int *pa, int *pb);
int main()
{
int a[5], b[5], i;
for (i=0; i<5; i++){
scanf("%d", &a[i]);
}
for (i=0; i<5; i++){
scanf("%d", &b[i]);
}
if (check_similar(&a, &b))
printf("Strictly identical");
else
printf("Not identical");
}
int check_similar(int *pa, int *pb)
{
int i=0;
while (*(pa+i)==*(pb+i)){
i++;
}
if (i==5)
return 1;
else
return 0;
因为a和b的定义如下:
int a[5], b[5]
每个符号都指向数组的第一个元素,因此满足了传递参数地址而不使用运算符&:
您看到的不兼容类型错误是因为通过使用&运算符,传递的变量类型实际上是int*[5]。由于数组类型会退化为简单的指针类型,因此被调用函数会将每个参数视为int**。原型要求这些参数类型为int*
将其更改为以下内容将解决此问题:
if (check_similar(a, b))
因为a和b的定义如下:
int a[5], b[5]
每个符号都指向数组的第一个元素,因此满足了传递参数地址而不使用运算符&:
您看到的不兼容类型错误是因为通过使用&运算符,传递的变量类型实际上是int*[5]。由于数组类型会退化为简单的指针类型,因此被调用函数会将每个参数视为int**。原型要求这些参数类型为int*
将其更改为以下内容将解决此问题:
if (check_similar(a, b))
您必须在check_中传递数组,就像它一样
check_similar(a,b);
您必须在check_中传递数组,就像它一样
check_similar(a,b);
由于数组作为参数传递给函数时,默认情况下会衰减为指向第一个元素的指针:
除非它是sizeof运算符的操作数,或一元&运算符,或是用于初始化数组的字符串文字,否则类型为array的表达式将转换为类型指针指向类型的表达式,该类型指针指向数组对象的初始元素,而不是左值。如果数组对象具有寄存器存储类,则行为未定义
资料来源:C18,§6.3.2.1/3
对该指针使用&运算符将获得一个int*[5]类型的指针,但选中它将int*作为参数
这就是指针不匹配,即所指的不兼容指针错误
只需省略&s:
一切都很好
由于数组作为参数传递给函数时,默认情况下会衰减为指向第一个元素的指针:
除非它是sizeof运算符的操作数,或一元&运算符,或是用于初始化数组的字符串文字,否则类型为array的表达式将转换为类型指针指向类型的表达式,该类型指针指向数组对象的初始元素,而不是左值。如果数组对象具有寄存器存储类,则行为未定义
资料来源:C18,§6.3.2.1/3
对该指针使用&运算符将获得一个int*[5]类型的指针,但选中它将int*作为参数
这就是指针不匹配,即所指的不兼容指针错误
只需省略&s:
一切正常。a和b分别是指向a[0]和b[0]的指针。因此,&a和&b分别是指向a[0]和b[0]的指针。a和b分别是指向a[0]和b[0]的指针。因此,&a和&b分别是指向a[0]和b[0]的指针。只需传递a和b,而不是&a和&b。a和b将从数组自动衰减到指针。只需传递a和b,而不是&a和&b。a和b将从数组自动衰减到指针。