&引用;指针应为“;及;冲突参数类型“;C中的错误
因此,我编写了一个插入队列的函数,即&引用;指针应为“;及;冲突参数类型“;C中的错误,c,pointers,compiler-errors,C,Pointers,Compiler Errors,因此,我编写了一个插入队列的函数,即en_queue。职能机构是: void en_queue(queue,max,front,rear) { int ch1; printf("\n Enter element to add->"); scanf("%d",&ch1); if(front==0 && rear==(max-1)) { printf("\n Caution!! Queue Overflow!!"
en_queue
。职能机构是:
void en_queue(queue,max,front,rear)
{
int ch1;
printf("\n Enter element to add->");
scanf("%d",&ch1);
if(front==0 && rear==(max-1))
{
printf("\n Caution!! Queue Overflow!!");
}
else if(rear==(max-1) && front>0)
{
rear=0;
*queue[rear]=ch1;
}
else if(front==-1 && rear==-1)
{
front=rear=0;
*queue[rear]=0;
}
else
{
rear++;
*queue[rear]=ch1;
}
}
原型声明是:
void en_queue(int *,int, int, int);
在打电话的时候,我这样说:
en_queue(queue,MAX,front,rear);
其中,queue[MAX]
是一个数组(#define MAX 10
),MAX
是数组可以包含的元素数,front
和reast
都是当前值为-1
的整数。我收到重复出现的类型错误:指针应为,函数'en_queue'的参数声明冲突。
我不明白为什么参数不匹配。因为我传递了数组的地址,并在指针变量中接收它,然后使用指针。那么怎么会有错误呢?如果队列
是int*
,那么作为“数组”访问它的正确方法是
而非*队列[索引]
队列[索引]
实际上是*(队列+索引)
如果你做了*队列[索引]
你实际上是在做*(*(队列+索引))
(队列+索引)
将到达地址位置索引
远离队列
中存储的地址的位置<代码>*(队列+索引)
将通过获取存储在地址中的值来解除对它的引用<代码>*(*(队列+索引))
将使用获取的值作为地址,并尝试进行另一次获取,这是错误的,因为现在您取消引用整数。首先:
void en_queue(queue,max,front,rear)
{
应该是:
void en_queue(int *queue, int max, int front, int rear)
{
第二,像*queue[rear]=0这样的表达式代码>应该正好队列[后方]=0因为队列
是int*
注意:表达式a[i]
==*(a+i)
,因此如果a
是指针,那么在表达式a[i]
中,您不需要显式遵从*
在表达式*queue[rear]
中,您得到了错误类型错误:应为指针,因为您取消引用了两次,例如*queue[rear]
==*(queue+rear)
,因为*(queue+rear)
不是指针,而是int,因此编译器消息需要一个指针
编译器消息:“函数en_queue()
”的参数声明冲突,因为第一个参数是int*
。在函数定义中,您不指定参数的类型,默认值被视为int类型 您说过:。其中queue[MAX]是一个数组。
您的声明是:void en_queue(int*,int,int,int)代码>
那么这意味着什么:*队列[后部]=ch1代码>
您正在尝试取消对整数的引用
将上述程序中的所有实例更正为:queue[rear]=ch1代码>虽然可以编写声明而不命名参数,只提供类型说明符,但不能编写仅包含名称且不包含说明符的定义。冲突的参数声明
错误就是因为这样,因为编译器将定义中的参数名称解释为类型而不是名称。想想看,编译器怎么知道没有类型的名称和没有名称的类型之间的区别呢
正如@grijesh所写,您应该将您的定义写为:
void en_queue(int *queue, int max, int front, int rear)
相反
另一个问题是,您正在取消对指针的引用两次,这对于指向整数的指针是没有意义的。数组和指针的相似之处在于,它们提供了一个内存地址,您可以使用该地址进行进一步的索引。这可以通过使用常规索引运算符来完成:
queue[index]
或者使用显式指针解引用运算符*
,以及如下所示的指针算法:
*(queue + index)
阅读有关指针算法的更多信息。这是您的问题:*队列[后部]
为什么<代码>队列
的类型为int*
无需取消对其的引用。卸下*
。另外,您得到的错误似乎表明您为第一个参数传递了int**
type,但是函数被定义为接受int*
这与我的想法相同。当函数已正确声明时,定义这样的函数是否可以void en_queue(queue,max,front,reast)
。@nishant否我们还需要在函数定义中指定,因为默认值是int,其中第一个参数是int*
@nishant检查此项并
*(queue + index)