问题是我每次尝试提交此代码时都会显示此消息:
从不兼容的指针类型[默认启用]
进行分配
警告是由aux = q引起的; 我应该如何使它们兼容?
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a, b, c, d;
}
t_cuatro;
void order(t_cuatro * q);
int main()
{
t_cuatro x = {5,6,2,8};
printf("%d, %d, %d, %d\n", x.a, x.b, x.c, x.d);
ordenar(&x);
printf("%d, %d, %d, %d\n", x.a, x.b, x.c, x.d);
return 0;
}
void order(t_cuatro *q)
{
int * aux;
int aux2;
int i,j;
aux=q;
for(i=0;i<4;i++)
{
for(j=i+1;j<4;j++)
{
if(*(aux + i)>*(aux + j))
{
aux2 = *(aux+i);
*(aux+i) = *(aux+j);
*(aux+j) = aux2;
}
}
}
}
答案 0 :(得分:4)
int *
和struct t_cuatro *
不兼容。你不能“使它们”兼容。
看起来您正在尝试对结构中的内容进行排序...但您实际上并未使用order()
中的成员。我建议你使用数组(而不是四个变量:a,b,c和d):
typedef struct
{
int arr[4];
}
t_cuatro;
然后在order()
中,您可以将其分配给int *
:
void order(t_cuatro *q)
{
int *aux = q->arr;
/* remove the assignment aux = q; */
....
将数组打印为:
for (size_t i = 0; i < sizeof x.arr/sizeof x.arr[0]; ++i)
printf("%d ", x.arr[i]);