C 中可以通過指標來修改他所指的物件的值嗎

2021-06-25 14:45:08 字數 1530 閱讀 9331

1樓:匿名使用者

在c中記憶體,可以劃分為三種,堆、棧和靜態儲存區。

棧就是auto變數存放區域,自動釋放,在編譯時候需要知道空間大小。

堆一般用作開闢動態儲存區,需要人工開闢,人工釋放,可以在執行是開闢。比如說c中的malloc和free函式,還有c++中的new和delete。

還有就是靜態儲存區,這個區域存放一些常量,不能改變值。

你說的char *pp = "welcomt to c";

*pp = "pp is changed";

這句話本身是錯的,首先字串不能那樣賦值。pp指向一個字元,而不是整個一行。

就算換成

*pp = 'p'也是不對的,因為

char *pp = "welcomt to c";

意思是在靜態儲存區放入"welcomt to c",然後在棧內開闢一個指標pp,指向這個字串。

也就是說pp在棧中,而其指向的字串在靜態儲存區中。所以能改變pp指向,但是不能改變其指向的值。

你想把c/c++學明白了,一定要讓記憶體在你心中透明。

2樓:匿名使用者

可以。int a=1;

int *p=&a;

*p=3;

cout<<*p<<" "<

這裡a和*p都為3;

int b=2;

p=&b;

cout<<*p<<" "<

這裡改了p的地址,但a的值仍不變。

所以改物件的值只能修改指標所指物件的值,而不能通過修改指標的地址來改變一個物件的值

3樓:

行,比如

int* p = new int(0);//修改地址、賦初值*p = 1;//修改所指的物件的值

使用*號來修改

c++中的delete到底是清空什麼?是指標本身還是指標所指向的值?

4樓:匿名使用者

c++的delete要執行兩個步驟:

1 按照指標型別,呼叫該類的解構函式。

(這個是c的free沒有的功能)。

2 根據指標型別,釋放相應寬度的記憶體空間。(類似c的free)。

從這個題目來說,delete是是否指標所指向的物件。而不是釋放指標本身。

一般而言,delete p;以後最後跟一個 p=null;避免無效指標的二次訪問。

5樓:匿名使用者

主要是**記憶體,目的是為了告訴作業系統程式對這部分記憶體不在使用了 讓作業系統可以把這部分記憶體拿去做其它事情

6樓:

是清空記憶體,是指:指標指向的值的空間(記憶體),用於**記憶體

7樓:青檸

new 和 delete 是一組 new申請記憶體,delete釋放記憶體,記得將釋放的指標置為null

8樓:匿名使用者

指向的值,如果不用delete,指標本身沒了,但是所指向的空間沒有被釋放。

C 中可以通過指標來修改他所指的物件的值嗎

在c中記憶體,可以劃分為三種,堆 棧和靜態儲存區。棧就是auto變數存放區域,自動釋放,在編譯時候需要知道空間大小。堆一般用作開闢動態儲存區,需要人工開闢,人工釋放,可以在執行是開闢。比如說c中的malloc和free函式,還有c 中的new和delete。還有就是靜態儲存區,這個區域存放一些常量,...

C語言檔案指標,C語言中通過檔案指標訪問檔案有什麼好處?

你還沒解決嗎?你的bug應該不是檔案方式的問題。我才起來給你除錯,應該是 這一句的問題 fp1是檔案指標,fopen s函式返回的值型別是errno t 也就是int型別的值,因fp1錯誤的使用,而接受了fopen s函式的返回值,此時fp1指標的值變成0x0000000d fopen s函式的返回...

c 中byte指標如何賦值

因為沒有給m explain申請記憶體,如果是指標,必須先申請記憶體。或者使用陣列,讓系統自動分配記憶體。可改為 static jbyte m explain malloc 2 sizeof jbyte int i 0 m explain i jbyte 0xff 這兩行始終執行不下去 m expl...