首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言結構體指針操作符 -> 詳解:訪問成員的標準語法

     編輯:C 語言問答

核心定義

-> 是 **結構體/聯合體指針訪問成員運算符**。
若 p 是指向結構體的指針,則 p->member 等價於 (*p).member。

語法對比表

場景變量類型訪問語法等價寫法
直接訪問struct Node n;n.member—
指針訪問struct Node *p = &n;p->member(*p).member
動態分配struct Node *p = malloc(sizeof(*p));p->member(*p).member

完整示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Friend {
    char name[20];
    int age;
};

int main() {
    struct Friend f1 = {"ZhangHe", 36};
    struct Friend *p = &f1;

    // 三種訪問方式完全等價
    printf("直接訪問: %s, %d\n", f1.name, f1.age);
    printf("指針 -> :   %s, %d\n", p->name, p->age);
    printf("解引用 . :  %s, %d\n", (*p).name, (*p).age);

    // 動態分配場景
    struct Friend *q = malloc(sizeof(*q));
    strcpy(q->name, "LiSi");  // 必須用 -> 或 (*q).
    q->age = 25;
    printf("動態分配:   %s, %d\n", q->name, q->age);
    free(q);
    return 0;
}

鍵盤輸入技巧

  • 標準鍵盤:按 - (減號/底線鍵) 再按 > (Shift+.) 組合輸入 ->。
  • IDE 智能提示:輸入 p- 觸發補全,自動補齐 > 並列出成員。

常見錯誤與避坑

錯誤代碼原因修正
p.memberp 是指針,. 只能用於結構體變量改為 p->member
*p.member. 優先級高於 *,解析為 *(p.member) (p 無成員)加括號 (*p).member 或用 p->member
p->name = "New";數組成員不可直接賦值字符串字面量用 strcpy(p->name, "New")

總結

-> 是 C 語言為**結構體指針訪問成員**提供的語法糖,本質等價於 (*p).member 但更簡潔、優先級無歧義、可讀性更強。凡是持有結構體地址的指針 (&var、malloc、函數參數 struct Node*),訪問成員**統一使用 ->**,是專業 C 程序員的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved