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

C語言指針賦值合法性判斷:int n=2,*p=&n,*q=p 分析

     編輯:C 語言問答

指針賦值類型匹配規則

代碼:


int n = 2, *p = &n, *q = p;
// 哪個賦值非法? A p=q  B *p=*q  C n=*q  D p=n

逐項分析

選項左值類型右值類型合法性說明
A p=qint*int*✅ 合法指針賦值指針,地址傳遞
B *p=*qintint✅ 合法解引用後賦值整數,值傳遞
C n=*qintint✅ 合法整數變量賦值整數
D p=nint*int❌ 非法指針需地址,n 是整數值

核心原則

  • 指針變量 存儲地址,只能賦值地址類型:&變量、malloc返回值、其他指針、NULL/0
  • 解引用指針 (*p) 相當於所指變量,可參與數值運算與賦值
  • 整數 不能直接賦值給指針(需強制轉型,如 p = (int*)n 但極度危險)

編譯器行為


// GCC 編譯選項 -Wall -Wextra -pedantic
warning: assignment to 'int *' from 'int' makes pointer from integer without a cast
// 嚴格模式視為錯誤

正確用法示範


int n = 2;
int *p = &n;        // 取地址
int *q = p;         // 指針複製
*p = 10;            // 修改 n 為 10
n = *q;             // n 賦值為 10 (同樣)
int *r = malloc(sizeof(int)); // 動態分配地址
free(r);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved