代碼演示使用指針作爲一個練習:指針在C語法錯誤
#include<stdio.h>
struct s{
int *p;
};
int main(){
struct s v;
int *a = 5;
v->p = a;
printf("%d",v->p);
return 0;
}
爲什麼是語法錯誤:
invalid type argument -> (struct s)
代碼演示使用指針作爲一個練習:指針在C語法錯誤
#include<stdio.h>
struct s{
int *p;
};
int main(){
struct s v;
int *a = 5;
v->p = a;
printf("%d",v->p);
return 0;
}
爲什麼是語法錯誤:
invalid type argument -> (struct s)
您已經聲明v
不被指針( struct s v;
- no *
),並且您正在嘗試使用->
,它僅適用於指針。您還聲明a
是指針(int *a
- 有一個*
),但您嘗試使用整數初始化它。
要訪問結構對象的成員,我們使用點.
運算符。
v.p = a;
當結構對象需要通過指針加入時,我們使用運算符->
。
struct s *vp = &v;
vp->p = a;
而且你分配到一個指針
int *a = 5;
這是非常危險的,因爲任何試圖取消對它的引用導致崩潰的整數。
與StackOverflow上關於C的許多問題一樣,您需要回到基礎知識。
x->y
是一個簡潔的寫法(*x).y
。*
運算符接受一個指針,併爲您提供與該指針相關的變量。所以現在你的問題的答案很簡單。 v->p = a;
表示與(*v).p = a;
相同的東西*
運算符的值v
將指針v
變成一個變量......但v
不是指針。這是一個struct s
。因此,這是一個錯誤; *
運算符只能應用於指針類型的東西。
invalid type argument of ‘->’ (have ‘struct s’)
錯誤顯示在第8行& 9.都嘗試使用v->p
引用結構的元素。在這種情況下,您應該將v->p
更改爲v.p
。這是因爲'v'已被分配並且不是指針。
這是用指針玩的一段整齊的代碼。一旦你得到了v.p編譯,你會看到每次引用'a'時的核心轉儲。這是因爲你聲明'a'是一個指針,並沒有爲實際的整數值分配任何空間。嘗試添加以下代碼以查看它的位置:
int b = 5;
int* a = &b;
printf("%d\n", b);
printf("%d\n", *a);
printf("%d\n", a);
什麼是'int * a = 5;'應該表示什麼?我認爲你需要'int a = 5;'然後'v.p =&a;'(其中'&'是**運算符的**地址)。 – OnlyThenDidIReckonMyCurse