C語言之指標

2021-09-01 05:11:05 字數 2263 閱讀 3434

我一直覺得指標是c語言最難的部分,感覺學的特別差,今天想好好談談指標。

指標在32位作業系統下是4個位元組,在64位作業系統下是8個位元組.

下面區別一下%p %x,%p輸出的是指標的格式,主要是16進製制輸出,%x輸出的是16進製制,是int型別。

在32位作業系統下,%p和%x是沒有區別的。

在64位作業系統下,%p輸出的是8個位元組,%x輸出的是4個位元組,%p輸出若不夠8位,會在前面補0.

馮諾依曼體系結構:  輸入裝置   cpu 記憶體(儲存器)外存(硬碟) 輸出裝置。

指標是程式語言的乙個物件,利用位址,它的值指向存在電腦儲存器中另乙個地方的值,由於利用位址能找到所需的變數單元,可以說,指標指向該變數單元,在計算機的記憶體中,記憶體中的每乙個位置由乙個獨一無二的位址標識,記憶體中的每乙個位置都包含乙個值。這篇部落格裡面把指標指標變數講的很清楚)

注意這些值的輸出結果,下面區分一下指標和指標變數。

指標是個變數,存放記憶體位址的單元,int i =5;int* p=&i,&i就相當於指標,把i的指標&i賦值給了int*型指標變數p,p中存放著&i,所以說指標變數就是存放指標的變數。也可以說指標就是變數,用來存放位址的變數。1k就是2^10次方個位元組,1m就是2^10*2^10次方個位元組,1g就是2^10*2^10*2^10次方個位元組,所以在32位作業系統上,有4g的空間用來編址,這也就很容易明白,在32位作業系統上指標為什麼是4個位元組,64位作業系統上是8個位元組.

什麼是一級指標?

給指定的記憶體上寫入資料*(int*)0x12ff7c=0x100;左右值「=」右邊的就是右值,等號左邊的就是左值。a作為右值的時候,代表的是陣列首元素的首位址&a[0]的意思,a不能作為左值,但是a[i]可以作為左值。

一級指標在作為函式引數的時候,呼叫的時候,函式的形參和實參分別占有不同的記憶體塊。,只是這個記憶體空間存放的指標指向的是同一塊位址,函式的形參只是實參的拷貝,在傳值呼叫的時候,對形參的修改不會影響實參。

但是一級指標在使用過程中應該改注意:

1.在傳值呼叫的過程中,不要在函式中改變形參的指向來達到改變實參指向的效果,他們占有不同的記憶體塊,修改形參不會影響實參。 2.在傳址呼叫的過程中形參和實參雖然占用不同的記憶體塊,但是記憶體空間存放的指標指向的是同一塊位址,所以在形參中改變其指向空間的值,如此實參指向的空間位址也發生改變。

從上面的執行結果可以看出,在pointer1 函式中改變形參p的指向,並不會改變實參p的指向。所以輸入的值是一堆髒資料。

但是,進行如下的修改之後,看看執行的效果。

修改之後的執行結果,從**的改動可看出  pointer1函式中修改的不是形參指標的指向,而是修改形參指標指向的空間的內容。這樣就能達到一級指標做函式返回值的效果。

什麼是二級指標?

二級指標的形式是**p,指向指標的指標,通過二級指標,可以方便的通過改變形參的指向,來達到改變實參的目的。

二級指標的使用一般不常見,經常會用到typedef來使**可讀性更強,不然很容易出錯。

指標和陣列

指標在32位作業系統下是4個位元組,在64位作業系統下是8個位元組,

指標陣列就是乙個存放指標的陣列例如 int* arr1[10]     char *arr2[20]   char** arr3[20]  陣列指標是指標, int *pint能夠指向陣列的指標。

陣列指標就是能夠指向陣列的指標,int *p1[10]是乙個指標陣列, int (*p)[10]是陣列指標,p先和*結合,說明p是乙個指標變數,然後指著指向的是乙個大小為10個整型的陣列,所以p是乙個指標,指向乙個陣列,叫陣列指標。

完成課堂**和練習。

int arr[10],中arr和&arr雖然此處值一樣,但是代表的意義不一樣,&arr代表的是陣列的位址,arr以%p輸出輸出的是陣列首元素的位址,&arr+1相當於跳過整個陣列的大小,所以&arr+1相對於&arr的差值為40.陣列指標指向的是陣列,存放的是陣列的位址。

C語言之指標

指標型別的本質分析 1 指標的本質 指標的本質 一種復合的資料型別。下面我將以下面幾個作為例子進行展開分析 a int p b int p c int parvalue 3 d int pfun 分析 所謂的資料型別就是具有某種資料特徵的東東,比如資料型別char,它的資料特徵就是它所佔據的記憶體為...

C語言之指標

指標的概念 什麼是指標?如果用一句話概括的的話那就是,乙個存放記憶體空間位址的變數。指標也是乙個變數,指標存放的內容是乙個位址,該位址指向乙個記憶體空間。指標變數的定義 int p 該變數用來存放乙個空間的位址。p 代表該指標指所指向記憶體空間中的值,切記指標只能存放有效的記憶體空間位址,不能存放其...

C語言之指標

指標是c語言學習乙個重要的概念,它極大的方便了c語言程式設計,用好了指標可以幫助我們程式設計,但是同時指標也是飽受爭議,因為指標的使用很容易出錯,所以在一開始學的時候就弄懂有關指標的知識點是必要的。那麼指標是什麼呢?其實指標也是一種變數,和其他型別的變數一樣,也是儲存資料的,只是在指標變數裡面儲存的...