赋值不兼容的指针类型(警告)

时间:2017-10-13 13:15:28

标签: c compiler-warnings

问题是我每次尝试提交此代码时都会显示此消息:

  

从不兼容的指针类型[默认启用]

进行分配

警告是由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;

               }
        }
    }


}

1 个答案:

答案 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]);