- N +

c語言指針詳解例題,c語言指針流程圖例題

大家好,關于c語言指針詳解例題很多朋友都還不太明白,今天小編就來為大家分享關于c語言指針流程圖例題的知識,希望對各位有所幫助!

C語言指針不能指向什么

在C語言中,指針可以指向幾乎任何類型的數據,包括基本數據類型(如整數、字符、浮點數等)、數組、結構體、函數等。然而,有一些特殊情況下指針不能指向:

1.空指針(NULL):空指針是指不指向任何有效數據的指針,它的值為0或者NULL。使用空指針可以表示指針不指向任何有效的內存地址。

2.未初始化的指針:未初始化的指針是指在聲明時沒有賦予有效的內存地址的指針。未初始化的指針不能被直接使用,必須先為其分配內存或將其指向有效的內存地址。

3.寄存器變量:寄存器變量是指使用關鍵字"register"聲明的變量,它存儲在CPU的寄存器中,而不是內存中。由于寄存器的數量有限,所以不能取地址,也就不能用指針指向寄存器變量。

需要注意的是,指針的正確使用非常重要,使用指針時要確保指針指向的內存地址是有效的,避免出現野指針或空指針的情況,以避免程序出現錯誤或崩潰。

c語言指針++有什么效果

在C需要里,++是自增的意思,它等于將自己加1。但是++的位置不同意義也不同。

比如有某變量day,++day是前自增,day++是后自增。前自增和后自增的意義完全不一樣,執行完后的結果也不一樣。

前自增是先執行自增,后執行計算;后自增是先執行計算,后執行自增。

C語言中指針問題

題主的這個問題很有代表性,是很多初學C語言的同學經常會搞混的一個知識點,啥知識點?就是傳說中鼎鼎有名的“傳值”和“傳址”,就這一字之差,卻搞得多少英雄好漢競折腰。

我是石家的魚,從事C語言答疑解惑的工作,下面我來回答下題主的問題,題主和后來的小伙伴們看看還難不難。小伙伴們有什么問題,或者有不理解的地方,歡迎在評論區與我互動哦!

本回答原創,歡迎轉載。不過轉載時請注明作者和出處,謝謝!

1、main函數

我們先來看main函數。在main函數中,定義了一個變量z。變量z會被保存在內存中,我假設變量z在內存中的地址是0X123。0X123是16進制,至于我為何不用10進制來表示變量z的地址,我只想說,不要拘泥于這種細節嘛!

變量z沒有初始值,在內存中保存的示意圖如下:

我在示意圖中畫了一個問號,意思就是變量z還沒有一個值。

在main函數中調用了my_power函數,并且這個函數的參數是“&z”,也就是變量z的地址:0X123。題主的意思是想在my_power函數中給變量z一個值。下面,我們就來看看第一個my_power函數。

2、第一個my_power函數

好,現在整個程序進入了第一個my_power函數。第一個my_power函數啊,它有一個指針類型的參數:mypower。也就是說,整個程序在進入第一個my_power函數時,系統創造了這個指針變量mypower,注意“創造”這個詞語,我用粗體表示了。這個指針變量mypower接收main函數傳來的變量z的地址:0X123,那么此時指針變量mypower就指向了main函數中的變量z。如下圖所示:

繼續看第一個my_power函數。在這個函數中,又定義了一個變量z,只不過這個z是屬于第一個my_power函數的。在進入第一個my_power函數時,系統也創造了這個只屬于第一個函數my_power的變量z,只不過這個z的地址就不是0X123了,而是另外一個16進制的值,我假設是0X456,如上圖所示。在上圖中,我在屬于第一個my_power函數的變量z下畫了一個問號,意思就是在執行第一個my_power函數的“z=pow(x,y);"語句之前,屬于第一個my_power函數的變量z沒有值。

好了,現在執行第一個my_power函數的“z=pow(x,y);"語句。執行之后,我假設屬于第一個my_power函數的變量z的值是1,再執行下面的”mypower=&z;"語句之后,示意圖就變成如下這個樣子:

看到了嗎同學們?此時第一個my_power函數的指針變量mypower指向了屬于第一個my_power函數的變量z!天啊!我再強調下,此時第一個my_power函數的指針變量mypower,本來是指向屬于main函數的變量z,現在指向了屬于第一個my_power函數的變量z!

也就是說,截至到第一個my_power函數全部執行完畢,屬于main函數的變量z的值還是沒有,我還是用問號標記。而那個屬于第一個my_power函數的變量z的值,已經是1了!

OMG!

這還不是重點。重點是,第一個my_power函數全部執行完畢后,系統會“殺掉”屬于第一個my_power函數的指針變量mypower和變量z,如下圖所示:

我用叉號來表示當第一個my_power函數全部執行完畢后,系統銷毀了指針變量mypower以及屬于第一個my_power函數的變量z。

此時整個程序又回到了main函數,但是屬于main函數的變量z呢?它的值還是沒有,還是一個問號。所以題主你看,main函數中最后的printf語句輸出的變量z的值是一個莫名其妙的值,是不是?

3、第二個my_power函數

好,我們再看整個程序進入的是第二個my_power函數。第二個my_power函數也有一個指針類型的參數:mypower。也就是說,整個程序在進入第二個my_power函數時,系統也創造了這個指針變量mypower。這個指針變量mypower也會接收main函數傳來的變量z的地址:0X123,那么此時指針變量mypower也指向了main函數中的變量z。

好了,現在執行第二個my_power函數的“*mypower=pow(x,y);"語句。執行之后,我還是假設pow(x,y)這個函數返回一個值是:1。這個1給了*mypower,也就是給了屬于main函數的變量z,示意圖如下:

從示意圖可以看出,第二個my_power函數的指針變量mypower指向了屬于main函數的變量z,而且這個z的值是:1.

第二個my_power函數全部執行完畢后,系統會“殺掉”屬于第二個my_power函數的指針變量mypower,如下圖所示:

我還是用叉號來表示當第二個my_power函數全部執行完畢后,系統銷毀了指針變量mypower。但是,注意我的這個但是,屬于main函數的變量z,沒有被系統殺死,沒有被系統銷毀,它安安靜靜地霸占著0X123這個地址,圖中我用勾號來表示。整個程序回到了main函數,main函數一看,喲,我的變量z的值這次對了啊,好開心啊啊哈哈哈!所以main函數最后的printf就輸出正確的變量z的值。

4、回味一下

題主,各位小伙伴,看出什么了嗎?再仔細地慢慢地回味一下。C語言里好多的東西只可意會,不可言傳。

小伙伴們還有什么問題,或者有不理解的地方,歡迎在評論區與我互動哦!

C語言指針變量比較

首先要分清,是在聲明中還是在語句中。聲明中,例如:inta=1,b=2;int*p,*q;//聲明*p和*q是指針,用于指向int型數據。p=&a;q=&b;//語句,p和q是指針指向的數據的地址,p指向a,q指向b.if(p

c語言指針詳細講解

C語言中指針是一種數據類型,指針是存放數據的內存單元地址。

計算機系統的內存擁有大量的存儲單元,每個存儲單元的大小為1字節,為了便于管理,必須為每個存儲單元編號,該編號就是存儲單元的“地址”,每個存儲單元擁有一個唯一的地址。

指針變量除了可以存放變量的地址外,還可以存放其他數據的地址,例如可以存放數組和函數的地址。

C語言指針可以相加嗎為什么

指針是不能相加的,指針的本質是變量在內存中的地址,兩個地址相加是毫無意義的,因此指針不能相加,但是指針可以偏移,指針加一個數就好比從你家往哪里走多少公里,變成一個新的地址。指針加一個數就指向另一個變量的地址。

END,本文到此結束,如果可以幫助到大家,還望關注本站哦!

返回列表
上一篇:
下一篇: