在指標 int *p或char *p,中*p是內容,p是指標,呼叫`*p`時候類似間接定址
先看個簡單 指標實驗:在linux上gcc編譯執行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include
int
main()
linux上對應結果為
&i:0x7fff851b2e90
&p:0x7fff851b2e98
p:0x7fff851b2e90
*p:118
&k:0x7fff851b2e94
k:118
&i:0x7fff851b2e90
&s:0x7fff851b2ea0
s:0x7fff851b2e90
*s:118
/*從上面兩部分結果可以看出記憶體組織如下:(從綠色字型可以看出)從記憶體0x7fff851b2e90 處開始4個byte存放int變數i,接下來4個byte存放int變數k;(從上面黑色加粗字型)從0x7fff851b2e98開始的8個byte開始int指標變數p的值,而這個值對應的記憶體單元在使用*p取值時只會取4個byte。呼叫i時候類似直接定址,呼叫`*p`時候類似間接定址。*/
s:ch:dfdf
p:ch:0x40098f
s:cha:dfdf
p:cha:0x40098f
p:*cha:d
s:chi:fffd
p:chi:0x4009c5
p:*chi:f
p:chi:i
p:*chi:i love china
p:chi:i
p:*chi:i fove china
總結
一、*p 是p所在值得內容,使用值、用內容;?=*p
p是位址,賦值用位址;p=?
int *p 是8位byte;int 是4位bite
char*p 是4位bite; char 是2位bite
int *p,*q;
int a = 4;
p = &a;//直接賦值(賦位址);
*p = 4;//(間接賦值)
*p 相當於 a; *p = 4;相當於 a = 4;
q = p;//直接賦值(賦位址);
char *p = "i lova china";//間接賦值(位址)
char *q;
q = p;直接賦值(賦位址):
二、下面賦值錯誤:資料型別不一樣
int *p = 9;
p = 8;//如果正確應該是p=(int*)8;
p是位址;賦值用位址
char *p;
*p = "i love china"; //錯誤
下面正確
char *p = "i love china";
p = "i love china";
三、int i = 9;
int *p;
p = &i;(直接賦值,賦位址)
int a;
int *p;
p = &a;(同上)
p = (int *)0x56000056;(這句在arm嵌入式學習中用到,在計算機中並不合法)
p = ox10 <==> a = 0x100; <==> (*(int *) 0x56000056) = 0x100;
四、陣列中
string[4] 等同於 *(string + 4)
所以下面正確
一、char a = "i love china";
char *array;
array = &a[0];//array = &a[0];//array = a[0];//array = a;
*(array + 2) = 'f';
C語言指標學習總結
一 概念 二 舉例說明 首先是指標的定義 int p p是乙個整型變數。int p p是乙個指標變數,指向整型變數。int p p是乙個陣列,陣列裡儲存的是指向整型變數的指標 int p p是乙個指標,指向整型陣列的首位址。int p p是乙個函式,返回值是整型指標 int p p是乙個指標,指向乙...
C語言指標學習總結
上學的時候學習c語言,最煩的就是裡面指標,可是指標也恰恰是c語言的靈魂。最近在重溫資料結構的內容,因為大多資料結構的教材都是用c語言描述的,而資料結構中也大量的用到了指標的內容,所以我就在這篇筆記中記錄一下我這週複習c語言的心得。先看看百科上對指標的描述。在電腦科學中,指標 pointer 是程式語...
學習C語言的指標總結
感謝 非凡程式設計師的黃楊超老師的耐心講解 概論 這一點思考是我從為什麼很多看起來不是很複雜的 比如 facebook 需要大量頂尖高手來開發?這個答案中想到的,正如這位答主所說 事實上,從我的經驗來看,一般來說,很多軟體專案及產品,其在非功能性需求上的成本,難度和工作量,是要超過功能性需求的。在特...