“指標是C語言的靈魂”這句話一開始我沒怎么明白,現在接觸了指標,終于知道為什么這么說了,因為,,,,難,真難;下面說一下我對這句話的見解:
C語言擁有著其他語言所沒有的特性---直接訪問記憶體空間,并進行操作,與這個功能對應的工具便是指標,博主剛開始用 DEV-C++ 那段時間嘛,就有時候寫著寫著系統提醒我有病毒,而且每次都是我用 Dev-C++ 的時候,我就納悶了,我這用的好好的,怎么會是病毒軟體呢?現在我大概明白了,指標會直接操作記憶體空間嘛,而可以隨意進出一臺電腦的記憶體空間,是什么東西?病毒唄!那身為一個小菜雞,我怎么會那么早就用到指標呢,你還真別說 ,scanf(“%d”,&a)“&”這小玩意你看像不像取地址符(手動狗頭);總之C語言的指標既是高效的,又是危險的,我的電腦是這么對我自己敲的代碼的:

我一口鹽汽水噴死你,我自己寫的東西,擔心個錘子 (╯°□°)╯︵ ┻━┻
#什么是指標?什么是指標變數?取地址符“&”的作用是什么?地址運算子“*”的作用是什么,怎么理解兩者?
- 指標就是地址,而地址又是什么,舉個栗子:一個酒店有很多個房間,每個房間上都有著不一樣的房間號,而這些地址就類似于這些房間號;那么每個房間號又是多少位的呢?就32位作業系統而言,每個房間號也就是32位的,“32位”指的是二進制的32位,而1位元組代表8位,所以1個地址就占4個位元組,而對于 int a=1,盡管我們給變數賦值一位數這么小的數,他在記憶體單元中依舊是以 32位 儲存的,1位數就1位數唄,前面補31個0不就完了;我們可以通過地址來精確地找到房間,這些房間就相當于記憶體單元,那什么又是記憶體單元?想要使用變數,就先要在記憶體中占用一塊記憶體單元,然后才能向記憶體中儲存不同的資料;
舉個栗子:
(&88)是地址;
(&變數 a)也是地址;
- 指標變數不同于指標,指標只是地址罷了,而指標變數就是儲存地址的一種變數,所以指標變數又叫做地址變數;它也像儲存其他資料型別的變數一樣,只不過儲存的東西是地址;
舉個栗子:
int *q,double *q,char *q,這些都是指標變數,只不過他們所指向的記憶體所儲存的資料的型別不同罷了;
在定義了 int *q;的前提下,q 就是指標變數;
- 取地址符“&”的作用就像它的名字一樣,它可以把變數的地址取出來,也可以把88這樣的數字等在記憶體中占用的地址取出來;
舉個栗子:
#include<stdio.h>
int main()
{
int a;
a=88;
printf("%d\n",&a);//這里的&就是把88的地址取出來,并以整型的形式輸出
a=99;
printf("%d\n",&a);
//從這里可以看出,我們雖然對 a 賦了不一樣的值,但這并沒有改變 a 地址
}
運行結果:
6487580
6487580
--------------------------------
Process exited after 5.253 seconds with return value 8
請按任意鍵繼續. . .
- 指標運算子“*”的作用就是根據指標變數所提供的地址來找到“這個地址所對應的記憶體里放了什么東西”;所以說其實“*”和“&”其實就像是兩個方向恰好相反的指路牌:“*”是由地址變數指向什么東西,而“&”就是由什么東西指向指標變數;所以說“*”可以讀作“地址指向XX”,“&”可以讀作“XX的地址”
輔助理解代碼:
#include<stdio.h>
int main()
{
int a;
a=1;
printf("%d\n",a);
int *q;
q=&a;
// q 指向 a
printf("%d\n",*q);
// *q 就相當于變數 a,所以輸出1
*q=2;
printf("%d\n",*q);
//“*q=2”等價于“a=2”所以這里會輸出2
printf("%d\n",a);
//同理,這里也輸出2
}
運行結果:
1
1
2
2
--------------------------------
Process exited after 5.41 seconds with return value 2
請按任意鍵繼續. . .
博主水平有限,若文章有錯誤或不當之處,請狠狠批評博主 (~ ̄(OO) ̄)ブ
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342984.html
標籤:C
下一篇:大一C語言學習筆記(8)---指標篇--動態記憶體是什么?與靜態記憶體有什么區別?怎么使用動態記憶體,有什么需要注意的地方?
