所以我正在學習指標,我想我主要了解它們是如何作業的,但我仍在學習如何正確使用它們。
我撰寫了這段代碼,它接收一個指向帶有 innit 指標的串列的指標,每個指標都指向一個名為 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 ))
uj5u.com熱心網友回復:
在你的情況下
Data* aux, d1, d2;
意味著,aux是一個指標,d1而d2不是。你需要寫
Data *aux, *d1, *d2;
uj5u.com熱心網友回復:
本宣告
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462811.html
