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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言——指针

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

??????

????????目錄

????????指針是什么?

????????指針變量

??

????????使用指針變量的例子

?通過指針引用數組

&數組名vs數組名

野指針

野指針成因

?如何避免野指針

指針運算

????????

指針是什么?

指針是c語言中的一個重要概念,也是C語言的一個重要的特色,正確而靈活地運用它,可以使程序簡潔,緊湊,高效,每一個學習和使用c語言的人,都應當深入了解地學習和掌握指針,可以說,不掌握指針就是沒有掌握C的精華也可以說

指針是C語言的靈魂(doge)

由于通過地址能找到所需的變量單元,可以說,地址指向變量單元,打個比方,一個房間的門口掛了一個房間號2008,這個2008就是房間的地址,或者說,2008"指向"該房間.因此,將地址形象化地稱為“指針”。意思是通過它能找到以它為地址的內存單元!

指針變量

?

使用指針變量的例子

例? 通過指針變量訪問整型變量

int main() {int a = 100, b = 10;//定義整型變量a,b并初始化int* p1, * p2; //定義指向整型數據的指針變量p1,p2;p1 = &a; //把變量a的地址賦給指針變量p1p2 = &b; //把變量a的地址賦給指針變量p2printf("a=%d,b=%d\n", a, b);//輸出變量a和b的值printf("*p1=%d,*p2=%d\n", *p1, *p2);}

運行結果:

?

?在開頭處定義了兩個指針變量p1和p2。但此時他們并未指向任何一個變量,只是提供兩個指針變量,規定他們可以指向整型變量,至于指向哪一個整型變量,要在程序中指定.。程序第五第六行的作用就是使p1指向a,使p2指向b,此時p1的值為&a(即a的地址),p2的值為&b(即為b的地址)

*注意:定義指針變量時,左側應有類型名,否則就不是定義指針變量.

例如:

?通過指針引用數組

所謂數組元素的指針就是數組元素的地址

可以用一個指針變量指向一個數組元素。例如

int arr[10]={1,3,5,7,9,11,13,15,17,19}; //定義a為包含10個整型的數組 int *p; //定義p為指向整型變量的指針變量 p=&a[0]; //把a[0]元素的地址賦給指針變量p

&數組名vs數組名

int arr[10];

我們知道arr是數組名,數組名表示數組收元素的地址。

那么問題來了 &arr數組名到底是什么呢??

不如我們來段代碼吧!

?由此可以得出數組名和&數組名打印的地址是一樣的。

我們再來看一段代碼!

?根據代碼我們發現,其實&arr和arr,雖然值是一樣的,但是意義應該不一樣

實際上&arr表示的是數組的地址而不是數組首元素的地址。

數組的地址+1 跳過整個數組的大小,所以&arr+1相對于&arr的差值是40.

野指針

概念:野指針就是指針指向的位置是不可知的,(隨機性的丶不正確的丶沒有明確限制的)

?

野指針成因

1.指針未初始化

2.指針越界訪問

?

?如何避免野指針

1.指針初始化

2.小心指針越界

3.指針指向空間釋放即使置NULL

4.避免返回局部變量的地址

5.指針使用之前檢查有效性

指針運算

小時候我們就知道1+1等于幾 那我問你如果是指針加1的話 加的是那個數字嗎 ?

下面來看一段代碼:

這里我們可以發現p跟p+1相差1

這里c是多少呢 ?

16進制的C的10進制是12,所以q+1和q相差4?

p是整型指針相當于sizeof(int)=4

q是字符型指針相當于sizeof(char)=1;

以上就是我歸納指針的一些小結 如果能幫助友友們

希望給個一鍵三連 就是對我最大的支持!


總結

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

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