📝前言
這篇文章主要帶大家初步認識一下指針,供大家理解參考。
主要歸納與講解:
1,指針與指針變量
2,指針的基本使用(如何定義,初始化,引用)
🎬個人簡介:努力學習ing
📋個人專欄:C語言入門基礎
🎀CSDN主頁 愚潤求學
🌄每日雞湯:雄鷹不為暴風折翼,狼群不因長夜畏懼
文章目錄
- 一,指針與指針變量
- 1,地址
- 2,指針
- 3,指針變量
- 二,指針變量的基本使用
- 1,指針變量的定義
- 4,指針變量的大小
- 2,指針變量的初始化
- 3,指針變量的引用
- 4,解引用操作符(“ * ”)
一,指針與指針變量
相信大家在學習C語言的時候常常聽到別人提起地址和指針,那究竟什么是地址?什么是指針?什么又是指針變量?
1,地址
●拿學校舉例:
學校建成時就有很多宿舍,為了區分不同的宿舍,每個宿舍都有自己獨有的門牌號,當學校來了新同學時,學校就會給同學分配宿舍,而宿舍的門牌號就代表了同學居住的地址。
●C語言中的地址也是這樣:
計算機的內存有很多儲存單元,為了區分這些儲存單元,計算機的操作系統就給每個儲存單元都分配了自己唯一的編號,當我們在C語言中定義變量的時候,編譯器就會給變量分配儲存空間,這個儲存空間的編號就是存放變量的地址。
2,指針
C語言把數據儲存的起始地址稱為指針。
簡單來說:“指針”不過是C語言中對地址的一個新描述,新名字。
其實就是:儲存單元的編號 == 地址 == 指針
3,指針變量
指針變量就是一種用來存放指針的變量。
就像存放數字的變量我們稱為整型變量,那么存放指針的變量,我們就成為指針變量。
例如:
int a = 1; //我們把1賦值給變量a, a是整型變量
int* ptr = &a; //我們把a的地址賦值給ptr, ptr是指針變量
二,指針變量的基本使用
1,指針變量的定義
定義格式:
int *p1; //定義了指向整型的指針變量,指針變量的類型是:int*
float *p2; //定義了指向浮點型的指針變量,指針變量的類型是:float*
char *p3; //定義了指向字符型的指針變量,指針變量的類型是:char*
這里的“*” 是一個標識符,其含義是:代表了變量的類型是指針類型。
這的 int/float/char 指的是指針所指向的數據的類型。
指針變量也有不同的類型:把指針名字去掉,就是指針變量對應的類型。
我們如何理解指針變量的類型呢?
因為不同類型的變量所占用的內存的空間大小不同,因此指針變量前面的數據類型表示:保存的地址是對應數據類型的變量的指針
從語法上看,我們只須把指針聲明語句中的指針名字和名字左邊的指針聲明符*去掉,剩下的就是指針所指向的類型。
例如:
int *p1; //指p1存放的是一個存放整型數的起始地址。
float *p2; //指p2存放的是一個存放浮點數的起始地址。
char *p3; //指p3存放的是一個存放字符型數據的起始地址。
如圖:
4,指針變量的大小
我們都知道變量類型的大小與放什么內容有關
比如:
int類型放的是數字,大小是4字節。
char類型放的是字符,大小是1個字節。
那么指針變量的大小也就取決于放一個地址需要多大的空間
計算機決定的:
在32位機器上,存放一個地址要32個bit位,那么,在**32位機器上,一個地址的大小就是4個字節,指針變量的大小也就是4個字節。
在64位機器上,存放一個地址要64個bit位,那么,在64位機器**上,一個地址的大小就是8個字節,指針變量的大小也就是8個字節。
2,指針變量的初始化
指針變量可以在聲明時或者在賦值語句中初始化。可以被初始化為0,NULL或者普通變量的地址。
NULL的指針不指向任何數據,也被稱為“空指針”,表示數值0。
初始化如下:
int m = 3;
int *p1 = &m; //用普通整型變量m的指針初始化
double *p2 = 0; //p2指針變量不指向任何浮點數
int *p3 = NULL; //p3指針變量不指向任何整型數
當我們不初始化指針變量時,指針變量的值是隨機的。
●注意:
1,盡可能使指針初始化,以防止指針指向一個未知的或者未被初始化的內存空間,變成野指針。
2,除了0以外,不能用其他具體的數字直接賦值給指針變量。
3,指針變量的引用
指針變量和其他變量相似,都可以進行賦值和取值操作。
例如:
int m = 3;
double f = 4.5;
char ch = 'a';
//主要說明一下下面幾句代碼
int *p1 = &m;
double *p2 = &f;
char *p3 = &ch
int *p = p1
①p1=&m 表示:將m的地址賦值給p1,此時p1就指向m。
②p2=&f 表示:將f的地址賦值給p2,此時p2指向f。
③p3=&ch 與前兩句同理,即p3指向ch。
④p=p1 表示:將變量p1中的指針賦值到p變量中,此時p也指向了m儲存單元。
如圖:
4,解引用操作符(“ * ”)
作用是:取出指針變量所指向的內存單元中的值
下面我們在代碼中理解,如:
(1)
int a = 100;
int* pa = &a;
*pa = 0;
*pa=0的作用是:把a的值改成了0,在這里(*pa)的意思是通過pa中存放的地址,找到指向的空間 (其實就是a)
(2)
int p,m;
scanf("%d",&m);
p = &m;
printf("%d %d\n",m, *p);
printf("%x",p);
程序的輸出結果:
輸入:3
輸出:3 3 //這里打印的是 m 和(p)的值
22ff40 // 這里打印出的是 p中的指針,不同的計算機可能值不同
不難發現,m 與p的結果是相同的,即 * 的作用就是:通過p中存放的m的地址,找到m。
————————————————————————————————
🌈我的分享也就到此結束啦🌈
要是我的分享也能對你的學習起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學習交流!
📢公主,王子:點贊👍→收藏?→關注🔍
感謝大家的觀看和支持!最后,?祝愿大家天天開心!!!