您好,登錄后才能下訂單哦!
C語言知識點中的指針如何分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
指針是C的靈魂,沒有學會指針就相當于沒有學過C
指針的定義:指針就是內存單元的編號(編號>=0)
指針變量是存放內存單元編號的變量(存放地址的變量)
指針 & 指針變量是不同的
e.g:普通變量a的地址是1000H,可以稱a的指針是1000H 但是絕對不能說a的指針變量是1000H
指針是一個操作受限的非負整數:比如2個地址相乘是沒有意的 故不能做乘法操作,所以說指針是受限的
指針為什么重要?
(1).快速的傳遞數據,減少內存的使用
(2).可以使函數返回一個以上的值
(3).可以直接訪問物理硬件
(4).可以方便的處理字符串
(5).是理解面向對象語言中"引用"功能的基礎
(6).可以表示一些復雜的數據結構
指針的分類:
1.基本類型指針(重點):int *i//變量名:i int *表示i變量存放的是int類型變量的地址
e.g:
int *i; int a = 10; i = a//error:i & a 雖然都是變量 但是i 是指針變量 a是普通變量 類型不同不能賦值 i = &a;//True &是取地址符號 &a表示取變量a的地址;把a的地址賦值給指針變量i printf("*i = %d\n",*i)//輸出結果:*i = 3 i獲取到a的地址后*i 表示指向了a *i = a;
經典的例子加深對指針的理解:互換2個數字(之前使用的是普通變量,現在使用指針&函數)
#include <stdio.h> void swap(int p,int q) { int t; t = p; p = q; q = t; return; }//swap 不能完成互換,只是互換了形參的值 主函數中的實參值并未互換 void swap1(int *p,int *q) { int *t; t = p; p = q; q = t; }//swap1 不能完成 a b的值互換,只是互換指針變量 void swap2(int *p,int *q) { int t; t = *p;//*p =a ,*q=b *p = *q; *q = t; }//swap2 互換成功 int main(void) { int a,b; a = 5; b = 9; swap(a,b); printf("a = %d,b = %d\n",a,b); swap1(&a,&b); printf("a = %d,b = %d\n",a,b); swap2(&a,&b); printf("a = %d,b = %d\n",a,b); return 0; } /* 輸出結果: a = 5,b = 9 a = 5,b = 9 a = 9,b = 5 總結:思考:printf 為什么不能放在被調函數中? 題目的要求是:互換a b的值 而非被調函數的值互換 測試結果: 1.swap只是被調函數的形參值互換了 主函數中的實盤并沒有互換 2.swap1 只是互換 a b地址的存儲位置 并沒有互換 a b地址中的值 **3.swap2 為什么會成功?原因很簡單哦 swap2的功能是把 a b地址中的值互換了 簡單說:a b是被劃分出來的2個靜態地址 5,9是存放在地址中的值 swap2功能是把 2個地址中的 5 9互換 一旦地址中的值達到互換即 a b的值完成了互換** */
看完上述內容,你們掌握C語言知識點中的指針如何分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。