C語言指標運算詳解,c語言中,指標的運算是怎麼算的,如pa

時間 2021-08-11 17:49:52

1樓:百度文庫精選

內容來自使用者:zzbo2022

讓你不再害怕指標

前言:複雜型別說明

要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總結了一下其原則:從變數名處起,根據運算子優先順序結合,一步一步分析.下面讓我們先從簡單的型別開始慢慢分析吧:

intp;

//這是一個普通的整型變數

int*p;//首先從p處開始,先與*結合,所以說明p是一個指標,然後再與int結合,

//說明指標所指向的內容的型別為int型.所以p是一個返回整型資料的指標

intp[3];//首先從p處開始,先與結合,說明p是一個陣列,然後與int結合,

//說明陣列裡的元素是整型的,所以p是一個由整型資料組成的陣列

int*p[3];//首先從p處開始,先與結合,因為其優先順序比*高,所以p是一個陣列,

//然後再與*結合,說明陣列裡的元素是指標型別,然後再與int結合,

//說明指標所指向的內容的型別是整型的,所以p是一個由返回整型資料

//的指標所組成的陣列

int(*p)[3];//首先從p處開始,先與*結合,說明p是一個指標,然後再與結合

//(與"()"這步可以忽略,只是為了改變優先順序),說明指標所指向的

//內容是一個陣列,然後再與int結合,說明陣列裡的元素是整型的.

//所以p是一個指向由整型資料組成的陣列的指標

int**p;//首先從p開始,先與*結合,說是p是一個指標,然

2樓:騰訊電腦管家

c語言中的陣列是指 一類 型別,陣列具體區分為 int 型別陣列,double型別陣列,char陣列 等等。同樣指標 這個概念也泛指 一類 資料型別,int指標型別,double指標型別,char指標型別等等。

通常,我們用int型別儲存一些整型的資料,如 int num = 97 , 我們也會用char來儲存字元: char ch = 'a'。

我們也必須知道:任何程式資料載入記憶體後,在記憶體都有他們的地址,這就是指標。而為了儲存一個資料在記憶體中的地址,我們就需要指標變數。

因此:指標是程式資料在記憶體中的地址,而指標變數是用來儲存這些地址的變數。

c語言中,指標的運算是怎麼算的,如pa++

3樓:匿名使用者

指標自加一位

就是指向該型別的下一個單元

也就是實際增加的地址值

為sizeof(*pa)

4樓:雲淡風輕in蘇州

pa++就是pa = pa+1

但是這個1的位元組數是根據pa指標的型別來取值的比如int* pa;那這個1就是sizeof(int)double*pa;那這個1就是sizeof(double)陣列的話,很簡單,就是指向下一個元素的地址!

5樓:我是你爺

要看什麼型別,它會指向下一個變數的首地址,比如p指標是long int型的,p++就會跳過四個位元組指向下一個。一般指標自加運用於陣列中,因為這樣可以方便指標一個個指向陣列中的成員。

6樓:罪_飄落無殤

如果是陣列就指向下一個元素地址

7樓:維真

指向pa後面一個地址

c語言指標運算

8樓:匿名使用者

是5沒錯,,,這個指標是 *的優先順序高於後++ 所以y 等於5

9樓:匿名使用者

y=(*--p)++;

可以分解成:--p; y=(*p); (*p)++;

c語言指標詳解

10樓:徜逸

指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。資料在記憶體中的地址也稱為指標,如果一個變數儲存了一份資料的指標,我們就稱它為指標變數。

計算機中所有的資料都必須放在記憶體中,不同型別的資料佔用的位元組數不一樣,例如 int 佔用 4 個位元組,char 佔用 1 個位元組。

為了正確地訪問這些資料,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以準確地找到某個位元組。

c語言用變數來儲存資料,用函式來定義一段可以重複使用的**,它們最終都要放到記憶體中才能供 cpu 使用。資料和**都以二進位制的形式儲存在記憶體中,計算機無法從格式上區分某塊記憶體到底儲存的是資料還是**。

當程式被載入到記憶體後,作業系統會給不同的記憶體塊指定不同的許可權,擁有讀取和執行許可權的記憶體塊就是**,而擁有讀取和寫入許可權(也可能只有讀取許可權)的記憶體塊就是資料。

cpu 只能通過地址來取得記憶體中的**和資料,程式在執行過程中會告知 cpu 要執行的**以及要讀寫的資料的地址。

如果程式不小心出錯,或者開發者有意為之,在 cpu 要寫入資料時給它一個**區域的地址,就會發生記憶體訪問錯誤。這種記憶體訪問錯誤會被硬體和作業系統攔截,強制程式崩潰,程式設計師沒有挽救的機會。

變數名和函式名為我們提供了方便,讓我們在編寫**的過程中可以使用易於閱讀和理解的英文字串,不用直接面對二進位制地址,那場景簡直讓人崩潰。

需要注意的是,雖然變數名、函式名、字串名和陣列名在本質上是一樣的,它們都是地址的助記符,但在編寫**的過程中,我們認為變數名錶示的是資料本身,而函式名、字串名和陣列名錶示的是**塊或資料塊的首地址。

擴充套件資料

指標使用(

* 和 &

*&a可以理解為*(&a),&a表示取變數 a 的地址(等價於 pa),*(&a)表示取這個地址上的資料(等價於 *pa),繞來繞去,又回到了原點,*&a仍然等價於 a。

&*pa可以理解為&(*pa),*pa表示取得 pa 指向的資料(等價於 a),&(*pa)表示資料的地址(等價於 &a),所以&*pa等價於 pa。

對星號*的總結

在我們目前所學到的語法中,星號*主要有三種用途:

1、表示乘法,例如int a = 3, b = 5, c;  c = a * b;,這是最容易理解的。

2、表示定義一個指標變數,以和普通變數區分開,例如int a = 100;  int *p = &a;。

3、表示獲取指標指向的資料,是一種間接操作,例如

11樓:興夏真堵薄

*t=*a

令指標t指向的地址的內容等於指標a指向的地址的內容。

如int

i=1,

j=2,

*t=&i,

*a=&j;,執行*t=*a後,i變為j的值2。

t=a令指標t指向指標a指向的地址。t和a現在指向同一地址。

如int

i=1,

j=2,

*t=&i,

*a=&j;,執行t=a後,t指向j。再執行*t=1則j的值變為1。

關於C語言指標自增運算的問題,c語言中指標可不可以用在自增自減運算子中

搗蒜大師 這寫操作等價 p p 都是p加,然後 這些操作等價 p p p 相當於先 了,然後p再 include main p 指向2 printf d n p 2 p p 1 p指向3 printf d n p p指向4,再 4 p p 1 p指向5 printf d n p 5,p指向6 p p...

關於c語言中指標賦值的問題,關於C語言中指標賦值的問題

計算天下 你這樣想說明你還沒有真正理解記憶體和指標。int a 表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof int 不同編譯器可能不同。int p 也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存...

c語言指標的概念,論述C語言中指標的概念和作用,並舉例說明

指標是c語言中廣泛使用的一種資料型別。運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構 能很方便地使用陣列和字串 並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。指標極大地豐富了c語言的功能。學習指標是學習c語言中最重要的一環,能否正確理解和使用指標是我們是否掌...