簡體   English   中英

C語法錯誤的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM