指標變數作的賦值問題,關於指標變數賦值問題

時間 2022-02-11 23:40:09

1樓:匿名使用者

int *temp;

*temp=*p1; //這句為什麼不對?

因為int *temp指標還未指向一個合法記憶體地址,所以無法對其指向的記憶體單元進行賦值

而swap中的*p1顯然在呼叫前應該已經付過了,例如pointer_1=&a;

2樓:匿名使用者

swap(int *p1,int *p2)-----------------

這個函式裡面很混亂啊

*temp=*p1;這句沒有不對,

只是在這裡用法不對,

temp還沒有分配記憶體空間.

------------------

把函式改成

swap(int *p1,int *p2)就ok了,temp不需要int *型.

--------------------

如果你非要int *temp;

那麼請這麼改

swap(int *p1,int *p2)

3樓:那一永恆的瞬間

temp是個指標,*temp是它指向的那個地址的資料。

開始temp還沒有賦值,因此就沒有*temp,所以*temp=*p1錯誤。

p1,p2都是函式引數,它們是有值的,因此*p1和*p2都存在。因此可以有*p1=*p2

4樓:匿名使用者

你還是指標概念沒弄明白:指標是指向資料的,你定義後還沒有告訴它指向誰怎麼能給它賦值呢?

關於指標變數賦值問題

5樓:匿名使用者

其實你問的是一個問題,關於左值和右值的。

在賦值號左邊的變數稱為左值變數,賦值號右邊的變數稱為右值變數。

左值變數取其地址,右值變數取其值(內容)。

你可以將變數看做物件,任何變數包含2個屬性,一個是地址,一個是數值。地址對應一塊記憶體空間,其中存放數值(內容)。

因此,c++執行賦值語句時,先取左值(左邊變數的地址),再取右值(右邊變數的數值),然後執行賦值操作,即將取出的右值存入左值。

取值操作不會影響原值。所以答案1是a的地址,答案2還是7.

6樓:匿名使用者

還是a的地址

a有值,是7

7樓:匿名使用者

雖然b是正確答案,但是對cd的理解不對。

a,*p是對地址為p的記憶體賦值,因為p還未賦值,這種行為是危險的b,陣列的首址可理解為一個常量指標(即指向的地址不能改變的針),雖然指標不能被修改,但是其指向的地址的內容是可以改的。

c。a是常量,其地址不能被修改

d。錯誤在於對引用a的初始化,應該使用相同型別(int &a = b)

其實指標完整可以理解為一個整數(對常見的就是一個32位無符號整數),不過它的值有明確意義(代表一個記憶體空間),所以它的值不能是任意的(受可訪問地址範圍限制),從這個角度很容易理解為什麼指標相加是無意義的(會超出訪問範圍),而相差是有意義(兩個指標之間間隔了多少記憶體空間,不過要注意大地址減小地址才是有意義的)

c語言指標的賦值問題

8樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,地址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的地址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的地址。

陣列的變數名b表示該陣列的首地址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2;   //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首地址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理一個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首地址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

9樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知地址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

10樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

11樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

12樓:匿名使用者

p=&a//把a的地址給指標p

13樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

14樓:渾濃強浩然

p就是一個指標,他指向一個地址,而&p就是p剛才所指向的具體地址,*p是p指向地址裡面的東西。也就是值。*p=&a的意思是把a的地址給了*p,這樣的話p就指向

(指向a的地址)的地址。對指標賦值必須是int*p=null;或者int

*p;p=null。

c語言關於指標變數賦值的問題

15樓:匿名使用者

p=2000;//這樣寫是錯的吧,因為不能把int型賦值給int*型,我這樣理解對嗎? 這個理解是對的!(雖然其實這樣的賦值並沒有錯誤,因為p可以儲存整數)

scanf(「%d」,p) 這裡是通過p傳遞給scanf()函式一個地址,然後,函式向這個地址中寫入一下整數!而不是通過賦值!

指標的賦值問題

16樓:

首先指標最好不要做賦值運算,int *p,*q; q=p;p是一個地址就是把p的地址賦給指標p,兩個值都是16進位制數,但是這樣做的話兩個指標指的是同一個地址並且沒有被在其地址位之內放int型的整數;

int a,*p,*q; p=q=&a;是在上面的基礎上對其地址位置的記憶體放置了一個a(,但是這個數是多少是,是垃圾資料);

int a,*p,*q; q=&a; p=*q;在指標q和指標p所指位置上的記憶體中放置的是同一個a(int數,隨機的)*與&是逆運算,假如p是指標,*p代表的就是p所指記憶體中儲存的數,a代表一個int型的數,那麼&a代表的就是這個數所指的地址值;p等價&(*p);

int a=20,*p; *p=a;*p在這裡代表的是一個間接變數,你可以吧*p當成一個變數,這個變數比普通變數好用……

int a=b=0,*p; p=&a; b=*p;同上的道理,對於=號是從右往左運算的所以b=*p並不知道*p的值,*p的值是隨機的;

int a=20,*p,*q=&a; *p=*q;這個玩的是具體的int型值,對於p和q所指的地址並不做任何操作,都是隨機的地址;

int a=20,*p,*q=&a; p=q;同上面不一樣的是p與q指向了同一個地址,實際上是把q指向的地址賦給了p;

int p,*q; q=&p;這個就不用說了吧。

加上一句,雖然*p很好用,但是開始時由於其指向不明確,是隨機地址,濫用的話會造成記憶體管理混亂,建議在用指標前最好用malloc和new函式開闢動態記憶體。*

17樓:匿名使用者

指標是個存著地址的變數,因為我們每定義一個變數,記憶體就會給他分配空間,那麼每個變數必須會有一個儲存他的地方,我們稱為地址,他指向誰,裡面就存著誰的地址。如題*p=a;

此時p裡面存的是a的地址(記住這一點),還可以用取地址符&獲取變數的地址,如&a;表示的是a的地址。變數的值可以用*號獲取。* 後面加一個地址,表示這個地址裡面的數值(也記住,很重要)

定義3個原則

a * 後面只能跟地址, *p 表示引數的值

b &後面只能跟變數。 &a 表示引數a的地址

c 』=『 是賦值,為了程式的穩定,我們預設只允許同型別的引數進行賦值(若不同類也會賦值,但是執行結果會出錯)

就是說,只允許,指標地址賦值給指標地址,變數值賦值給變數值。瞭解這些,就可以分析了:

int *p,*q; q=p; //對的,因為p,q都是指標,可以相互賦值 依據 a,c原則

int a,*p,*q; p=q=&a;//對的,p,q指標表示地址,根據b原則,&a也是地址,因此可以進行賦值

int a,*p,*q; q=&a; p=*q;//錯的,q =&a 是對的,但是p =*q 是錯的,根據原則a,c,*q是值,p是地址,與原則c衝突

int a=20,*p; *p=a;// 對的,他們都表示值

int a=b=0,*p; p=&a; b=*p;//對的,p = &a 原則bc ,b = *p 原則ac

int a=20,*p,*q=&a; *p=*q;// 對的,初始時q得到a的地址,*p和*q都是表示值,符合原則c

int a=20,*p,*q=&a; p=q;//對的,原則bc

int p,*q; q=&p;// 對的,原則bc

祝你進步,指標自己琢磨下,會明白的!

18樓:gta小雞

請分清「指標本身的值」和「指標指向的地址中的值」這兩者的區別。指標本身的值就是地址。

int a = 2;

int *p = &a;

//p = 100; //試圖將指標本身的值修改為100,即令指標p指向記憶體地址100的位置,這是未定義行為

*p = 100; //將指標p指向的地址中的值修改為100,即將a的值修改為100

19樓:匿名使用者

int a =0, *p = &a;

*p = 100; 這個是合法的,修改指標指向記憶體空間內容。

int *p =4;直接把整數賦值給指標變數,由於地址4一般是非法地址,訪問的時候會出現問題,所以一般不會把數值賦值給指標。

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

飛翔的蠍子大叔 關於int p1 123這個問題我看了很多資料,在這裡我發表一點看法,該問題非常好,這是c語言需要規範的地方。int p1 123 是非法操作,指標表示地址,地址 123?我是沒有見過這種操作。地址一般用二進位制 八進位制 十六進位制表示,123表示地址根本就是扯淡!這個語句的目的就...

c 整型指標賦值的問題,C 整型指標賦值的問題

丁文博 你好,你應該通過malloc申請空間,或者是用陣列 現在你這樣p i指向的是一個未知空間,可能是系統需要用到的,不允許你更改內容,即使允許你這樣也是不對的,因為這個空間屬於這個程式,用它就是錯誤的。 你只申請了一個int的空間,卻操作了256個int,當然不對了 韓亭晚區溪 char p a...

指標和指標變數的區別是什麼,指標和指標變數有什麼區別呢?

指標,其實就是一個記憶體地址 指標變數,就是存放記憶體地址的變數,也就是存放指標的變數,這樣說,通俗了吧,他們之類不應該講區別,而是應該講關係,指標是一個地址,而指標變數時存放地址的變數。的意思是 指向 地址應該對應地址。變數的指標就是變數的地址。存放變數地址的變數是指標變數。允許用一個變數來存放指...