-> 的类型参数无效。帮我理解指点?
Invalid type argument of ->. Help me understanjd pointers?
所以我正在学习指针,我想我基本上了解它们的工作原理,但我仍在学习如何正确使用它们。
我写了这段代码,它接收一个指向带有指针的列表的指针,每个指针都指向一个名为 Data 的结构。
我想按数字组织它们,比如我有 [29-10, 28-10, 3-1] 结果将是 [ 3-1; 2-10; 29-10]
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int dia;
int mes;
} Data;
void organiza(Data** l, int n)
{
Data* aux, d1, d2;
int j, i;
for (i = 0;i<n-1;i++ )
{
for (j= i + 1;j<n;j++)
{
d1 = l[i];
d2 = l[j];
if (d1->mes > d2-> mes || (d1->mes == d2-> mes && d1->dia >= d2-> dia ))
{
aux == d1;
d1 == d2;
d2 == aux;
}
}
}
}
这样做时我遇到了很多错误,我不明白为什么会这样:
error: incompatible types when assigning to type ‘Data’ {aka ‘struct ’} from type ‘Data *’ {aka ‘struct *’}
d1 = l[i];
error: invalid type argument of ‘->’ (have ‘Data’ {aka ‘struct ’})
if (d1->mes > d2-> mes || (d1->mes == d2-> mes && d1->dia >= d2-> dia ))
你的情况
Data* aux, d1, d2;
表示,aux
是一个指针,d1
和d2
不是。你需要写
Data *aux, *d1, *d2;
这个声明
Data* aux, d1, d2;
相当于
Data (* aux ), d1, d2;
或同
Data* aux;
Data d1, d2;
即变量 d1
和 d2
的类型为 Data
。
例如在这些语句中
d1 = l[i];
d2 = l[j];
左操作数的类型为 Data
但赋值的右操作数的类型为 Data *
因为变量 l
的类型为 Data **
宣言
void organiza(Data** l, int n)
^^^^^^^^
如果你想将变量d1
和d2
声明为指针那么你需要写
Data *aux, *d1, *d2;
所以我正在学习指针,我想我基本上了解它们的工作原理,但我仍在学习如何正确使用它们。
我写了这段代码,它接收一个指向带有指针的列表的指针,每个指针都指向一个名为 Data 的结构。 我想按数字组织它们,比如我有 [29-10, 28-10, 3-1] 结果将是 [ 3-1; 2-10; 29-10]
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int dia;
int mes;
} Data;
void organiza(Data** l, int n)
{
Data* aux, d1, d2;
int j, i;
for (i = 0;i<n-1;i++ )
{
for (j= i + 1;j<n;j++)
{
d1 = l[i];
d2 = l[j];
if (d1->mes > d2-> mes || (d1->mes == d2-> mes && d1->dia >= d2-> dia ))
{
aux == d1;
d1 == d2;
d2 == aux;
}
}
}
}
这样做时我遇到了很多错误,我不明白为什么会这样:
error: incompatible types when assigning to type ‘Data’ {aka ‘struct ’} from type ‘Data *’ {aka ‘struct *’}
d1 = l[i];
error: invalid type argument of ‘->’ (have ‘Data’ {aka ‘struct ’})
if (d1->mes > d2-> mes || (d1->mes == d2-> mes && d1->dia >= d2-> dia ))
你的情况
Data* aux, d1, d2;
表示,aux
是一个指针,d1
和d2
不是。你需要写
Data *aux, *d1, *d2;
这个声明
Data* aux, d1, d2;
相当于
Data (* aux ), d1, d2;
或同
Data* aux;
Data d1, d2;
即变量 d1
和 d2
的类型为 Data
。
例如在这些语句中
d1 = l[i];
d2 = l[j];
左操作数的类型为 Data
但赋值的右操作数的类型为 Data *
因为变量 l
的类型为 Data **
宣言
void organiza(Data** l, int n)
^^^^^^^^
如果你想将变量d1
和d2
声明为指针那么你需要写
Data *aux, *d1, *d2;