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

時間 2021-09-05 11:59:54

1樓:計算天下

你這樣想說明你還沒有真正理解記憶體和指標。int a;表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof(int),不同編譯器可能不同。int *p;也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存的內容是不確定的,假設為00000ff0,那麼*p表示地址00000ff0上的值。

*p=a則把地址00000ff0的值變為a的值,顯然如果該地址目前正在被某個程序使用,就有可能破壞該程序,因此這種方法是十分危險的。給指標賦值一般有兩種方法,一種是將已經存在的變數的地址傳遞給指標,格式為:p=&a;另一種是首先為指標申請指向的合法記憶體,c語言中用函式malloc(),然後給已申請的地址賦值,如*p=6。

2樓:

指標是指向記憶體地址,*p 也就是 指標p 指向了a 也就是擁有了 a的功能和變數值

如果a是一個類 那麼他可以呼叫a 的類中成員函式或者變數 具體需要**實現

指標與指標之間相互賦值

比如 指標 pt 和 pr 他們分別指向不同的地址 一個是 a 一個是 b 如果a 和 b 分別是 1 和 2 那麼 pt=pr 也就是 pt指向了 pr中的指標,而這樣如果在實際使用中不當 可能會造成崩潰 這個是一個概念 一般不這樣使用。因為很危險 具體 多接觸下 指標就應該知道了。主要還是看應用到什麼環境裡面

3樓:

*p=a等同於p=&a,都是把a的地址給p,或者說把p指向a

你對*p=a的理解有誤,在指標定義時,用int *p;

在程式中,p表示指標變數,而*p表示指標p所指向的變數的值

c語言指標的賦值問題

4樓:大野瘦子

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

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改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

5樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如: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;

這樣就不會產生錯誤

6樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

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

*p=8;

這樣就對了。

7樓:七先生是遊戲鬼才

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

8樓:匿名使用者

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

9樓:匿名使用者

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

10樓:渾濃強浩然

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

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

*p;p=null。

在c語言中能否直接給指標指向的資料賦值?為什麼?

11樓:大野瘦子

可以,但int *p;*p=7;這樣不行。

因為“能直接給指標指向的資料”賦值,而這裡的p還沒有指向,所以不能賦值,這種指標有個名字叫“懸浮指標”,是不能給它賦值的。

這樣才可以:

int a,*p=&a;*p=7;

實際上就是使a等於了7。

注意事項

也可以使用賦值運算子為指標變數賦值,但要保證兩個指標變數的型別相同。

假設有如下變數定義:

int i,j,*p,*q;p=&i;q=&j;

這兩句將變數i和j的地址分別賦值給指標變數p和q;

執行了q=p後,執行該條語句,指標變數p和q都指向了同一個變數i,因此指標變數p和q中存放的都是變數i的地址&i。變數i此時並沒有初始化,只為其分配了記憶體單元。

注意理解:q=p;和*q=*p

前者為指標變數q賦值,即將指標變數p中存放的某個變數的地址賦值給q。顯然,賦值後,q和p就指向了同一個變數。

後者將p指向變數的賦值給q指向的變數。

例子:p=&i;

q=&j;

i=2;

j=3;

12樓:匿名使用者

可以直接給指標指向的資料賦值。

因為*p操作是這樣一種運算,返回p的值作為地址的那個空間的取值。存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。

在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的函式的值。

13樓:

能,一定能。但你int *p;*p=7;這樣不行。為什麼呢?

因為“能直接給指標指向的資料”賦值,而你這裡的p還沒有指向,所以不能賦值;這種指標有個名字叫“懸浮指標”,俗稱野指標,是不能給它賦值的。這樣才可以:int a,*p=&a;*p=7;,實際上就是使a等於了7。

14樓:在臨潮湖吃中餐的淺藍暹石

不行,因為你只是宣告瞭一個int型的指標,代表執行某一塊記憶體,可是並沒有說明到底是那一塊記憶體, 所以後面的賦值也是沒有意義的,7只是個存放在靜態儲存區的字面值,是不能這麼賦值的。

15樓:匿名使用者

只有字元指標可以,他會自動生成記憶體來儲存

16樓:匿名使用者

指標要指向一個合法的地址才可以賦值

17樓:超級旅行者

*p沒有指向記憶體,要先申請記憶體,可以這樣

#include

int *p = (int *)malloc(sizeof(int));

*p = 7;

printf("%d",*p);

關於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語言指標中a b,c語言中,指標問題! a b和a b,有什麼不同?a是指標

豬頭或火寶寶 你好!首先我們已經知道 a,b,都是指標變數,a表示指標變數所指向的值,同樣 b也是如此。a b就是表示把指標b所指向的值賦值給指標變數a所指向的值。但是要是指標a要是沒有初始化或是開闢空間的話,這樣賦值就有危險!例如 int a int b 5 a b 首先宣告一個指標變數a,但是系...

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

上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a...