欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言指針教程示例詳解

 更新時間:2022年02月16日 10:16:53   作者:喬喬家的龍龍  
這篇文章主要為大家介紹了C語言指針教程的示例詳解

指針

指針提供了對地址操作的一種方法,因此,使用指針可使得 C 語言能夠更高效地實現(xiàn)對計算機底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是 C 語言的精髓。

概念解釋就不去搬原定義了,又臭又長不好理解,精煉兩點就是:

1.指針是內(nèi)存中的一個最小單元的編號,也就是地址;

2.平時我們說的指針,通常是指指針變量,用來存儲內(nèi)存地址的變量

也就是說:指針就是地址,口語中指針通常是指針變量

內(nèi)存

要搞明白指針首先要搞明白內(nèi)存。

我們把一大坨內(nèi)存劃分為一個個小的內(nèi)存單元,一個基本單元大小為一個字節(jié),我們對應需要某個單元里面的數(shù)據(jù)時,就要進行查找,大海撈針的工程如果逐個排查就顯得低效而呆滯,于是我們就對其編號,如同對一個大酒店的房間設置門牌號一樣。我們說的內(nèi)存編號就相當于內(nèi)存地址

在這里插入圖片描述

這個編號是怎么產(chǎn)生的呢?我們的機子有32位和64位,對應有32根地址線和64根地址線,地址線其實就是電線,通電后高低電頻轉(zhuǎn)化為數(shù)字信號對標的就是 1 和 0 。強調(diào)一點,這些編號是不需要存起來的。

我們實際看一下數(shù)據(jù)在內(nèi)存中的布局,通過調(diào)試的內(nèi)存窗口可以進行監(jiān)視,

在這里插入圖片描述

為了直觀看到我直接在地址欄輸入 &a 查看當前內(nèi)容:

在這里插入圖片描述

發(fā)現(xiàn)確實如此。

指針類型

int* pa = &a;
char* pb = &a;

意義:
我們把 int* 放到char里面可行嗎?理論上是可以的,因為指針大小都是四個字節(jié),但是放到char里面解引用只訪問了一個,總結(jié)一下,指針類型賦予了指針的訪問權(quán)限大小。

野指針

形如:

int main()
{
int *p;
*p = 20;

return 0;
}

野指針就像是野狗,這條野狗它沒有主人,因此它很危險見誰咬誰;同理,指針沒有初始化時,它沒有指向任何對象,就不敢動他,p的地址是隨機值,分配的空間也是不知道的。
野指針成因除了未初始化還有就是越界訪問或者指針指向空間已經(jīng)釋放。所以一定要初始化,有值就指向這個值,沒有就直接NULL或者分配一塊合理的空間以保證有效性(如下)。當你有一個指針創(chuàng)建了不想用時,記得一定把這條野狗栓在樹上!

int* p = NULL;  
int* q = (int*)malloc(1024);  

指針運算

指針之間其實是可以進行計算的,比如指針 - 指針,如下:

int main()
{
int a[5]={0};
prinf("%d\n",&a[4]-&a[0]);
prinft("%d\n",&a[0]-&a[4]);
return 0;
}

結(jié)果是4,-4。所以不難知道兩個地址相減就是元素的個數(shù),這個表達式的前提是兩個指針指向同一塊空間。
有一些特殊情況需要給大家聲明一下:

for (int *p = &arr[NUM - 1]; p >= arr; p--)
 {
        printf("%d ",*p);
 }

當數(shù)組–這種結(jié)構(gòu)存在時,雖然很多編譯器可以順利完成,但還是應該避免這樣寫,因為標準并不保證它可行,規(guī)定是:

C語言標準規(guī)定了允許指向數(shù)組元素的指針可以和最后一個元素后面的內(nèi)存位置進行指針比較,不允許與第一個元素之前的內(nèi)存位置進行比較

二級指針

看上去是不是感覺很高大上?不要想的太神秘也不用過分聯(lián)想。
我們在寫指針時“ * ”不管是靠近類型還是變量意義都是一樣的,于是就有下面操作:

int main()
{
int a = 10;
int* p = &a;
int** pp = &p;
return 0; 
}

這里 a取地址存入p,假設 p 是 0x0022FF40,在32位平臺下 p 有沒有地址呢?當然有,指針大小為 4 個字節(jié)嘛,必定會在內(nèi)存中開辟一塊地方,那么我取 p 的地址時就是所謂的二級指針。
歐吼吼~~,對,快樂就是無限套娃,同理得三級,四級……

在這里插入圖片描述

指針數(shù)組

我們有整型數(shù)組形如:int arr[10] ;存放整型的數(shù)組

同理如:int* arr[10] = { &a,&b,&c…… } ,就是用來存放整型指針的數(shù)組。

以上就是C語言指針教程示例詳解的詳細內(nèi)容,更多關于C語言指針教程的資料請關注腳本之家其它相關文章!

相關文章

  • C語言中的while循環(huán)語句示例詳解

    C語言中的while循環(huán)語句示例詳解

    這篇文章主要介紹了C語言中的while循環(huán)語句,主要包括while循環(huán)的基本信息及常見問題,本文結(jié)合實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2023-06-06
  • C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進行排序

    C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進行排序

    這篇文章主要介紹了C語言中使用qsort函數(shù)對自定義結(jié)構(gòu)體數(shù)組進行排序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入探討POJ 2312 Battle City 優(yōu)先隊列+BFS

    深入探討POJ 2312 Battle City 優(yōu)先隊列+BFS

    本篇文章是對優(yōu)先隊列+BFS進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++產(chǎn)生隨機數(shù)函數(shù)簡單介紹

    C/C++產(chǎn)生隨機數(shù)函數(shù)簡單介紹

    這篇文章主要為大家詳細介紹了C/C++產(chǎn)生隨機數(shù)函數(shù)的實現(xiàn)方法,如何使用C/C++產(chǎn)生隨機數(shù)函數(shù),感興趣的小伙伴們可以參考一下
    2016-04-04
  • 一篇文章帶你了解C++模板編程詳解

    一篇文章帶你了解C++模板編程詳解

    這篇文章主要介紹了C++的模板,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 詳解C++值多態(tài)中的傳統(tǒng)多態(tài)與類型擦除

    詳解C++值多態(tài)中的傳統(tǒng)多態(tài)與類型擦除

    值多態(tài)是一種介于傳統(tǒng)多態(tài)與類型擦除之間的多態(tài)實現(xiàn)方式,借鑒了值語義,保留了繼承,在單繼承的適用范圍內(nèi),程序和程序員都能從中受益。這篇文章主要介紹了C++值多態(tài)中的傳統(tǒng)多態(tài)與類型擦除,需要的朋友可以參考下
    2020-04-04
  • QT樹的具體項目實現(xiàn)

    QT樹的具體項目實現(xiàn)

    本文主要介紹了QT樹的具體項目實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • VScode+ESP32簡單環(huán)境搭建

    VScode+ESP32簡單環(huán)境搭建

    本文章向大家介紹ESP32-C3搭建環(huán)境教程,主要包括ESP32-C3搭建環(huán)境教程使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言進制轉(zhuǎn)換代碼分享

    C語言進制轉(zhuǎn)換代碼分享

    本文給大家分享的是使用C語言實現(xiàn)進制轉(zhuǎn)換的代碼,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-07-07
  • C語言中的結(jié)構(gòu)體快排算法

    C語言中的結(jié)構(gòu)體快排算法

    這篇文章主要介紹了C語言中的結(jié)構(gòu)體快排算法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論