日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言中*用于指针,关于C语言中指针的理解

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中*用于指针,关于C语言中指针的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于c語言中指針的一些理解

這幾天在看任哲老師編寫的嵌入式實時操作系統uC/OS原理與應用一書,第二章講到指針的用法,我發現自己有些地方有疑問,就重新看了關于c指針的知識。同時也對指針有了一定的理解。

在理解指針的時候我們一定要將他跟內存地址聯系起來,這也是c語言跟c++的區別,c語言可以更接近硬件底層。對于指針我們可以理解為其是一個存放內存地址的變量。*跟&,*是聲明一個指針變量,而&是創建一個引用。

我們現在定義一組聲明:

int ?a=112,b=-1;

float ?c=3.14;

int ?*d=&a;

float ?*e=&c;

對于以上的聲明,我們可以用如圖這種方式來表達,每一個小格代表一個內存地址,我們這里定義兩個字節為一個字。100,102,104,106,108這五個整數為地址,我們定義a,b,c,d,e為其地址名字,這樣我們可以通過名字訪問內存地址而不是具體的數字。這些變量名也讓我們更加方便的去訪問內存地址。

在這些聲明中,變量a,b用于存儲整型變量,而c用于存儲浮點型變量,d和e里邊存的是a跟b的地址而不是內容(這點需要我們牢記)d的地址是106內容是100(也就是a的地址)。我們不能理解為變量d和e的值就是112跟3.14。d和e被聲明為指針并不能改變這些表達式的求值方式。也就是說指針型變量有兩點不同于整型變量,一是他對應地址存的內容,二是他的求值方式,不會因為他是指針型變量就將其內容改變為所指變量里的內容。如果你簡單的理解為他是指針,所以可以自動的獲得存儲于位置100和104的值,那么你就錯了。變量的值就是分配給該內存位置所儲存的數值,即使是指針也不例外,只是不同的是他們求值方式會不同。

通過一個指針訪問他所指向的地址的過程稱為間接訪問。用于執行間接訪問的操作符是單目操作符*。

對于上圖所示d的值為100,。當我們使用了間接訪問操作符時,他表示訪問內存位置100并查看那里的值,因此*d的右值為112——位置100的內容,他的左值是位置100本身。間接訪問操作符需要的是個右值,但這個操作符所產生的結果是個左值。指針變量之所以可以作為左值,不是因為他們是指針,而是因為他們是變量。對指針變量進行間接訪問表示我們應該訪問指針所指向的位置。

我們來看一個表達式:

*&a=25,

這個表達式的意思是將25賦值給a。我們來分析這個表達式。&a表示取a的地址。他是一個指針常量(使用這個指針常量并不需要知道的實際值,因為a我們已經定義了此內存地址的名字。*操作符訪問其操作數所表示的地址。在這個表達式中*的操作數是a的地址,所以25直接存于a所對應的那個內存空間中。

我們接下來看指針的指針

int ?a=12;

int ?*b=&a;

c=&b;

c我們定義的是一個指針,這個指針是指向b這個指針的指針,而它所指向的那個指針是一個指向整形的指針。

1.int *p;

2.int **p;

3.int *p[10];

4.int (*p)[10];

5.int *p(int);

6.int (*p)(int);

7.int (*p[10])(int);

對于上述的7條分別是:

1.指向整型的指針

2.指向指針的指針,而他所指向的指針是一個指向整型變量的指針

3.一個有10個指針的數組,這十個指針分別指向十個整型變量

4.一個指針,指向有十個整型數據的指針

5.一個函數(不是函數指針),函數有一個整型參數,返回值是一個指向整型的指針

6.函數指針,該函數有一個整形參數,返回值是一個整型類型

7.一個有十個指針的數組,該數組中的指針指向一個函數,該函數有一個整型參數并返回一個整型數

總結

以上是生活随笔為你收集整理的c语言中*用于指针,关于C语言中指针的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。