1樓:雨曄
int *p=47;
這個用法是不正確的
這個語句等於下邊的
int *p;
p=47;
你直接將指標p的值賦值為47是很危險的
應為如果記憶體中位址為47的地方剛好是某個系統程式或關鍵模組佔據的話你進行下面
*p=20;的賦值行為
有可能導致系統直接崩潰哦
2樓:匿名使用者
是的,不過這很危險。而且cpu的32位保護機制也未必能讓。。。
3樓:匿名使用者
在定義時在*p後直接加個數字表示指向記憶體的47號位址。
而*p表示47號位址指向的數。所以不能賦值。*p=20是錯誤的。在定義指標變數的時候是不允許不賦初值的,後果可能使系統崩潰。
4樓:中質子
*p=20 把p所指向的位址中的值設為20
int *p=47 p所指向的位址
5樓:匿名使用者
int a;
int *p;
a=47;
*p=47;
*p不等於a
a=47;
(*p)=47;
a等於*p
6樓:種馳樂正雪珊
不可以。指標變數在使用前必須初始化,未初始化的區域性自動變數的值是隨機的,a和b可能指向記憶體中的任意位址。當執行*a=10;和*b=20;這兩條賦值時會破壞記憶體中原有的資料,如果a和b指向的是不能讀寫的區域,那麼就會產生嚴重的錯誤。
你這個**中a和b就是野指標。
7樓:匿名使用者
int *p=47;
是錯的吧 指標不是位址嗎 好象不能直接賦值的吧
c語言中的空指標是什麼意思?
8樓:匿名使用者
這樣一看才知道大家對空指標的概念如此渾濁哦!!
首先:void* 這不叫空指標,這叫無確切型別指標.這個指標指向一塊記憶體,卻沒有告訴程式該用何種方式來解釋這片記憶體.
所以這種型別的指標不能直接進行取內容的操作.必須先轉成別的型別的指標才可以把內容解釋出來.
還有'\0',這也不是空指標所指的內容. '\0'是表示乙個字串的結尾而已,並不是null的意思.
真正的空指標是說,這個指標沒有指向一塊有意義的記憶體,比如說:
char* k;
這裡這個k就叫空指標.我們並未讓它指向任意地點.
又或者char* k = null;
這裡這個k也叫空指標,因為它指向null 也就是0,注意是整數0,不是'\0'
乙個空指標我們也無法對它進行取內容操作.
空指標只有在真正指向了一塊有意義的記憶體後,我們才能對它取內容.也就是說要這樣
k = "hello world!";
這時k就不是空指標了.
9樓:匿名使用者
如果函式的引數可以是任意型別指標,那麼應宣告其引數為void *
典型的如記憶體操作函式memcpy和memset的函式原型分別為:
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
這樣,任何型別的指標都可以傳入memcpy和memset中,這也真實地體現了記憶體操作函式的意義,因為它操作的物件僅僅是一片記憶體,而不論這片記憶體是什麼型別。空指標僅僅是申明了乙個變數名,告訴編譯器有個變數存在,當然你後面肯定會用到它(事實上你不用也沒人怪你)。
注意c++中語法要求更嚴格,不允許直接對空指標賦值,而必須先進行型別轉換。
10樓:藍冰_藍水
上面的錯了。其實空指標就是指值為null的指標。而且null在c和c++的定義方式也不一樣,甚至不同的編譯器也有不同的要求。
例如:define null 0 //c的定義方式
define null (void *)0 //c++的定義方式
11樓:匿名使用者
指標沒有指向任何東西
空指標指的就的'\0'!
12樓:匿名使用者
指標沒有指向任何東西
13樓:匿名使用者
空指標指的就的「0」!
14樓:你是臥底
char* k 不能算空指標吧
c語言中,空指標的使用意義是什麼?在程式設計中使用空指標會帶來什麼影響?
15樓:
語言定義中說明, 每一種指標型別都有乙個特殊值—— 「空指標」 —— 它與同型別的其它所有指標值都不相同, 它「與任何物件或函式的指標值都不相等」;
不要返回指向棧記憶體的指標或引用,因為棧內存在函式結束時會被釋放。
指標是個很強大的工具,可是正因為它太強大,所以要操作它不是件易事。操作不當造成的野指標,甚至會引起系統宕機等比較嚴重的後果。 如果程式定義了乙個指標,就必須要立即讓它指向乙個我們設定的空間或者把它設為null,如果沒有這麼做,那麼這個指標裡的內容是不可預知的,即不知道它指向記憶體中的哪個空間(即野指標),它有可能指向的是乙個空白的記憶體區域,可能指向的是已經受保護的區域,甚至可能指向系統的關鍵記憶體,如果是那樣就糟了,也許我們後面不小心對指標進行操作就有可能讓系統出現紊亂,宕機了
16樓:
指標,太有用了,也最難管理的,好處多的是,比如,函式傳遞,引數是結構時,傳指標可以提高效能
17樓:匿名使用者
空指標的意義嘛,就是說你不應該對它進行任何讀寫操作
很多返回乙個指標的函式,都會返回空指標,表示函式操作失敗,例如 fopen 在開啟檔案失敗後就返回空的檔案指標
c語言,空指標,野指標,通用指標
18樓:匿名使用者
野指標就是不知道指向**,或者說不知道指向的記憶體是否可以使用,一般都是剛剛宣告但沒有初始化的指標。
空指標不是指向常數0,只指向位址0,即null,其實換句話說,指標的本質就是位址嘛,空指標就是指標本身的值(位址)為0
空指標的作用是防止野指標的出現,因為我們不能知道野指標到底指向**,所以我們也無法判斷乙個指標是否是野指標,這樣很危險,但如果養成將指標初始化為空指標的習慣,我們就能判斷出這個指標是不是有效的(判斷是不是null就可以了)
通用指標一般都用在函式傳參,實現所謂的「多型」,但到函式裡面使用時,一般還是被轉換成具體型別的指標。
19樓:匿名使用者
首先空指標並不是指向0的指標,空指標是什麼,就是乙個被賦值為0的指標,在沒有被具體初始化之前,其值為0.
所以指標沒有指向常數0,它指向的儲存空間是null,暫時為0.
c語言 空指標
20樓:
空指標是其值為null或0的指標,在下認為稱之為「指向」null或「指向」0的指標都是錯誤說法,因為若有int a,*p=&a;,則稱指標p指向了a,並不能說指標p指向了&a,只能說p的值是&a,不然就大錯特錯了。沒有指向(即沒有賦值),或指向的目標已銷毀了的指標稱為懸浮指標(可能人們據說的野指標也是它吧)。int *p=null,*n=null,p=n是不是有意義呢?
單純看這裡是沒有意義的,但指標是變數,如果保證指標n不變化且是null,那n就是空常指標,一點意義都沒有。否則的話p=n保證在生存期間指標p是跟隨n變化的。這就是p=n存在的意義。
21樓:
int *p;p=&a空指標也分配了空間它裡面是隨機的碼,我認為int *p和int*p=null是一樣的。p=n就是p和n都指向了乙個n內的隨機數。
22樓:魂歸紅魔
個人理解,在c語言中空指標是指向null的指標,而在c++中則是指向位址為0的指標,雖然在實際應用中,基本一致,但是還是有點差別。另外,空指標本身是有位址的。在c++中是一樣的,在c中就變成了null==null的問題了,這就是仁者見仁智者見智的問題。
c語言中,空指標null會佔記憶體嗎?多少位元組
23樓:劉培鑫
佔用的 這個指標 比如 char *p ; p =null ;
p是個指標 佔4位元組, 只是裡面的位址值是 0而已
24樓:匿名使用者
null表示的只是這個位址為空而已,這個指標變數本身還是要佔記憶體的,32位環境下,指標所佔的記憶體都是4個位元組
25樓:匿名使用者
一樣要佔記憶體,其大小應該是看你定義的變數的來分配記憶體的
26樓:匿名使用者
指標都會佔用4個位元組的記憶體, null只是表示沒有指向記憶體
c語言中空指標0與null相同嗎
27樓:匿名使用者
c語言的0和null的確是相同的,null其實是乙個#define定義,在每一種c語言編譯器中都有標頭檔案來定義null這個符號,null的定義類似於這樣:
#define null 0
所以空指標0和空指標null是一回事。
c語言關於指標的求解,C語言中關於指標的指標問題?
int x 10 p1 a x 3 x 3 3 陣列從0開始,3其實是第四個 b p1 x 3,p1 先執行p1 x 3,也就是指向x 3 因為p1定義成指標。p1 這時候先執行再加,這表示式仍然是3 c p1 x 2,p1 p x 2 x陣列的位址加2,也就是指向x 2 x 2,這時候p 同時也是...
C語言的空值怎麼表示?C語言中 絕對值 怎麼表示
int型別變數沒有空值這一說,只有在堆上申請的變數才能是空值,用null表示。c語言中空值一般是針對指標而言,空值用null表示,表示不指向任何記憶體。比如,int p null 宣告變數並初始化為空值,不指向任何記憶體位址。c語言基本資料型別有void 空型別 int 整型 float 浮點型別 ...
C語言中指標佔用多少位元組,C語言中乙個指標佔用多少位元組
指標即為位址,指標幾個位元組跟語言無關,而是跟系統的定址能力有關,譬如以前是16為位址,指標即為2個位元組,現在一般是32位系統,所以是4個位元組,以後64位,則就為8個位元組。借lz的問題,請教大家乙個問題吧 指標佔用的位元組數和指標的型別有關係嗎?謝謝哦 c語言中,指標變數為何只佔4位元組?首先...