c語言中,指標問題,xa,xa,有什麼區別,x的值

2021-03-04 04:42:46 字數 6454 閱讀 8429

1樓:匿名使用者

語句形式一復:

int a=10;

int *x=&a ; //這種寫法

表示將a的地制址儲存到x中去,這是定義指標,同時初始化操作的方法 *x=a=10

語句形式二:

int a=10;

int *x; //定義指標,不初始化

x=&a ; //這種寫法表示將a的地址儲存到x中去, *x=a=10

而此時,若寫成:*x=&a ; //則程式會執行報錯!!

c語言中,指標問題!*a=b和a=&b,有什麼不同?a是指標

2樓:匿名使用者

*a=b,是吧b的數值放到a指向的空間

a=&b,是把b的地址賦值給a

相同之處就是*a b的數值相同

不同回之處是答,上面的是數值賦值,那麼a指向的空間沒有改變而下面的賦值a指向的地址改變了,也就是a申請的記憶體空間中的數值變成了b的地址

3樓:匿名使用者

*a=b; 這個是把b的值賦值給指標a指向的空間

a=&b; 這個是把b的地址複製給指標a

4樓:匿名使用者

同意cpucash......

c語言中p=&a和p->a的區別,不是都表示指標p指向a嗎

5樓:匿名使用者

->只有在出現類的環境中才可用到,而&則隨時可用。

舉個例子有個類(或結構)x當中有整形成員a:

class x

;這時我們宣告該類的一個物件a,並用你提到的第一句話來將a的地址賦值給指標p:

x a;

x* p = &a;

再寫語句如果需要呼叫p指向的地址中的變數,也就是物件a,那麼用如下表示式:

*p如果要訪問a中的成員a,那麼用如下表示式:

a.a如果想利用指標p來實現上述目的,那麼用如下表示式:

(*p).a

c++的編寫者將上述表示式簡單寫為:

p->a

6樓:匿名使用者

->指標操作符的優先順序非常高,。p->a是取得p指向結構體的成員a,等價於(*p).a

p=&a表示p是一個指標,&a的地址賦予pstruct data

; /*定義結構體*/struct data * p;/*定義結構體指標*/struct data a = ;/*宣告變數a*/int x;/*宣告一個變數x*/

p = &a ; /*讓p指向a*/

x = p->a;/*這句話的意思就是取出p所指向的結構體中包含的資料項a賦值給x*/

/*由於此時p指向a,因而 p->a == a.a,也就是1*/

7樓:丿北城丨涼築

a和p是變數,&a和*p是表示式,1和0x1000是常量a和*p表示的都是整形左值,p和&a表示的都是指標型左值,1和0x1000表示整形和指標型右值。(左右值的概念不清的話,google一下)

在記憶體中,a和p有儲存空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在暫存器中存放的,1和0x1000也有空間,在程式的常量段存放。

*p按照stanley lippman的著作《c++ primer》中的描述,p是指標變數,*是解引用操作符,*p是一個表示式,含義是「對指標變數p進行解引用操作」,這與表示式&a的含義「取整形變數a的地址」是正好是相反的操作。

8樓:阿凡達

p=&a 是對a的引用。p->a是指標p下的內容。對a的引用是對a起別名,對p進行操作就是對a的操作。

p->a的話,就是指標p指向的儲存單元的a。這個你對p操作的話就不會改變a。和前一個是不一樣的!

9樓:匿名使用者

在用的時候完全可以混用

這是在搞笑嗎

10樓:季成佟橋

你說的復*(p++)h和*p++是等價的

但是這裡制的++是先用在加所以結果都是10要是程式是這樣的

#include

void

main()

,*p;

p=a;

printf("%d\n",*(p++));

printf("%d\n",*(p++));

p=a;

printf("%d\n",*p++);

printf("%d\n",*p++);

}結果就會變成11了

希望採納

c語言中指標加不加*有什麼區別

11樓:丶自由丨落體

剛開始學習

baic,同樣有這du個疑問,在網上zhi查了一下,沒

有什麼讓人一目了dao然的解釋。

專用int *x作為屬

例子。既然int *x 只是定義了一個記憶體空間,儲存一個記憶體地址,那麼普通的int x應該也可以做到。

int num = 5;

int *x = #

int x1 = #

x 和 x1 同樣儲存的是 num 的記憶體地址,但是隻有用了*宣告的指標能夠通過 *x 來訪問 num .

printf("%p , %p", x ,x1) // 這一行會輸出兩個一樣的記憶體地址。

printf("%d" , *x ) // 成立,不報錯,正常輸出 5。

printf("%d" , *x1 ) // 不成立,編譯器會報錯,『*』的運算元必須是指標。

第二個變數名使用x1的原因是,當你嘗試 printf 輸出的時候,指標 *x 會強行覆蓋普通的 x 。

12樓:匿名使用者

不加*取地址,加了*取地址裡的內容

13樓:匿名使用者

比如 int a=5; int *p =&a; p就是5的地址 *p就是p地址上的內容5

14樓:匿名使用者

因為在bai函式形參中 a是指標(du地址),所以zhi char *t定義的是dao

指向字元的指回針

你記住在初始化的答時候就是這麼定義的

初始化指標例子

int h = 5;

int * pt = &h;

在這種情況下,被初始化的是指標,而不是它指向的值。也就是說,上面的語句將pt(而不是*pt)的值設定為&h

15樓:鈕玉芬孛辰

基本來上沒有區別,c++僅僅只是在c語言

自的基礎上bai

增加了物件導向的概念,所du有它又被稱為zhi是「帶類的daoc」,因此,c++在指標操作上增加了指向物件的指標(引用);但究其本質而言,指標仍然是記憶體中的地址,這一點沒有改變.

16樓:hay暗夜

不加就不是指標就像是定義陣列的。這是一種語法規則

17樓:狼性我行我素

加*號代表的是訪問指標儲存地址上的資料!

不加*號就代表的給這個指標變數賦值只能是指標!

18樓:碧血玉葉花

加不加bai括號,是

陣列指標,還du是指標陣列zhi的區別

*p[2] 是一個指標dao陣列,內首先它容是一個陣列,陣列中存的是指標,存指標的陣列。

(*q)[2] 是陣列指標,加括號先與 *結合,它是一個指標,指向一個第一維包含2個元素的2維陣列,存陣列地址的指標。

q=s ; 把 陣列 s 的地址存入 qp[0]=s[0] 把s[0] 第0行的首地址存入 陣列p[0]中

19樓:匿名使用者

問題描述的不是很清楚

c語言中「指標」和「指標變數」的區別是什麼??

20樓:大野瘦子

1、概念不同

「指標」是概念,「指標變數」是具體實現,指標也是一個變數,所以需要進行定義,而對於指標的定義,與一般變數一樣。

2、 存放地址不同

一個變數的(記憶體)地址稱為該變數的「指標」,通過指標能找到以它為地址的記憶體單元。而指標變數是用來存放另一個變數的地址的(即指標)。

指標和指標變數的關係

1、指標就是地址,地址就是指標。

2、地址就是記憶體單元的編號。

3、指標變數就是存放記憶體地址的變數。

4、指標和指標變數是兩個不同的概念,但要注意的是,通常我們敘述時會把指標變數簡稱為指標,實際他們含義並不一樣。

注:指標裡存的是100. 指標:地址 - 具體。

指標裡存的是地址,指標:指標變數 -可變。

指標的好處:

1、直接訪問硬體

2、快速傳遞資料(指標表示地址)

3、返回一個以上的值返回一個(陣列或者結構體的指標)4、表示複雜的資料結構(結構體)

5、方便處理字串

6、指標有助於理解物件導向

21樓:蓋辜苟

用例子來看一下。

int a=3;

int *p;

p=&a;

現在來看一下。a=3這個式子先解釋一下

等式右邊是常量,左邊是變數。

同理的p=&a,左邊的是指標變數,右邊的是指標

指標的基本概念:為了區別記憶體的不同位置,記憶體被分成位元組,記憶體的全部位元組順序地賦予一個稱為地址的編號。程式中的變數將在記憶體中佔據一定的記憶體位元組,在這些位元組中儲存的資料資訊稱為變數的內容。

一個變數佔用連續的若干個記憶體位元組時,最前面的一個位元組的地址就作為該變數的地址。指標就是記憶體地址,是變數的地址,或函式的入口地址。變數的地址在程式執行時,起著非常重要的作用。

當計算機在計算含有變數的表示式時,計算機按變數的地址取出其內容,並按變數的地址將計算結果存入到變數佔據的記憶體中。

如**: int x=l; x=x+2; 其中語句「x=x+2;」中的第一個x涉及到變數x佔據的記憶體,第二個 x是引用變數 x的內容。該語句的意義是「取x的內容,完成加上2的計算,並將計算結果存入變數x佔據的記憶體中。

」指標變數和它所指向的變數:在c語言中,地址也作為一種值,能被儲存、比較、賦值,並稱地址資料為指標型別,而稱儲存地址值的變數為指標變數,簡稱指標。c程式可用運算子&取變數的地址,如表示式&x的值就是變數x的地址。

程式除能按名引用變數外,也可利用變數的地址引用變數。按變數名引用變數稱為直接引用,而將變數a的地址存於另一變數b中,藉助於變數b引用變數a稱為對a的間接引用。

定義指標變數的一般形式為: 型別 * 指標變數名; 或 型別 * 指標變數名=初值表示式; 其中,指標變數名是識別符號,指標變數名之前的符號「*」,表示該變數是指標型別的。而最前面的「型別」,表示該指標變數能指向變數或函式的型別。

初值表示式是一個地址表示式,如表示式中有某變數的地址表示式,則這個變數應是前面已定義的。

在c語言中,當定義區域性指標變數時,如未給它指定初值,則其值是不確定的。程式在使用它們時,應首先給它們賦值。誤用其值不確定的指標變數間接引用其它變數,會引起意想不到的錯誤。

為明確表示指標變數不指向任何變數,在c語言中用0值表示這種情況,記為null。

如 ip= null; 也稱指標值為0的指標變數為空指標。對於靜態的指標變數,如在定義時未給它指定初值,系統自動給它指定初值0。

指標變數取程式物件的(開始)地址值,不能將一個整型量或任何其它非地址值賦給一個指標變數。另外,指標變數對所指向的物件也有型別限制,不能將一個不能指向的物件的地址賦給指標變數。

如有以下定義: int i=100,j,*ip,*intpt; float f,*fp; 以下**如註釋所敘。 ip=&i;/*使ip指向i*/ intpt=ip;/*使intpt指向ip所指變數*/ fp= &f;/*使fp指向正*/ ip=null;/*使 ip不再指向任何變數*/

在電腦科學中,指標(pointer)是程式語言中的一個物件,利用地址,它的值直接指向(points to)存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為"指標"。

意思是通過它能找到以它為地址的記憶體單元。 在高階語言中,指標有效地取代了在低階語言,如組合語言與機器碼,直接使用通用暫存器的地方,但它可能只適用於合法地址之中。指標參考了儲存器中某個地址,通過被稱為反參考指標的動作,可以取出在那個地址中儲存的值。

作個比喻,假設將電腦儲存器當成一本書,一張內容記錄了某個頁碼加上行號的便利貼,可以被當成是一個指向特定頁面的指標;根據便利貼上面的頁碼與行號,翻到那個頁面,把那個頁面的那一行文字讀出來,就相當於是對這個指標進行反參考的動作。

指標是程式設計語言的一個重要概念。指標在c程式中有以下多方面的作用:

利用指標能間接引用它所指的物件。

利用各種型別的指標形式引數,能使函式增加描述能力。

指標與陣列結合,使引用陣列元素的形式更加多樣、訪問陣列元素的手段更加靈活。

指標能用來描述資料和資料之間的關係,以便構造複雜的資料結構。當一個資料a要關聯另一個資料b時,在資料a中增加一個指向資料b的指標就可實現資料a關聯資料b。結合系統提供的動態分配儲存設施,又能構造出各種動態資料結構。

請問C語言中的XAXa和XAXa

x a x a 是說 x a 和 x a 其一成立或都成立是錯的。就是說若 x a 或 x a 成立,那麼語句是錯的。也就是說 要想語句為true x a 和 x a 必須都不成立。x a x a 是說 x a 和 x a 都成立是錯的。就是說若 x a 和 x a 成立,那麼語句是錯的。也就是說 ...

c語言中變數指標輸出問題,C語言中變數指標輸出問題

這和printf用 s的規則相關。首先ps是一個指向字元型資料的指標 printf用 s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或...

c語言中的指標有什麼意義,C語言中的指標有什麼意義

寫簡單的程式的話不用指標也行了吧.比如這裡a是一個地址 編譯後 為了讀寫這個地址單元裡的東西,可以用p,也可以用一般變數a.對於指標的便利,我現在能想到的,可能是 函式a呼叫函式b時,把一個記憶體塊的地址傳遞過去,這樣可以避免按值傳遞時開闢一個棧空間並逐一拷貝記憶體塊裡的值的開銷 c 裡的拷貝建構函...