[英]Pointers in C syntax error
下面給出的代碼說明了如何將指針用作練習:
#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)
與StackOverflow上有關C的許多問題一樣,您需要回到基礎知識。
x->y
是編寫(*x).y
的簡潔方法。 *
運算符采用一個指針,並為您提供與該指針關聯的變量。 因此,您問題的答案現在很簡單。 v->p = a;
與(*v).p = a;
含義相同(*v).p = a;
v
值的*
運算符將指針v
變成變量...但是v
不是指針。 這是一個struct s
。 因此,這是一個錯誤; *
運算符只能應用於指針類型的東西。
您已將v
聲明為不是指針( struct sv;
*
),並且嘗試使用->
,該方法僅對指針有效。 您還聲明a
為指針( int *a
具有*
),但是您嘗試使用整數對其進行初始化。
要訪問struct對象的成員,我們使用點.
操作員。
v.p = a;
當需要通過指針訪問struct對象時,我們使用運算符->
。
struct s *vp = &v;
vp->p = a;
另外,您正在為指針分配一個整數
int *a = 5;
這是非常危險的,因為任何嘗試取消引用它都會導致崩潰。
invalid type argument of '->' (have 'struct s')
錯誤顯示在第8和9行中。兩者都嘗試使用v->p
引用結構的元素。 在這種情況下,您應該將v->p
更改為vp
。 這是因為已經分配了“ v”,它不是指針。
這是用於處理指針的簡潔代碼。 進行vp編譯后,每次引用“ a”時都會看到一些核心轉儲。 這是因為您將'a'聲明為指針,並且沒有為實際整數值分配任何空間。 嘗試添加以下代碼以查看其去向:
int b = 5;
int* a = &b;
printf("%d\n", b);
printf("%d\n", *a);
printf("%d\n", a);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.