老鐵們,大家好,相信還有很多朋友對于c和指針課后題答案中文和c語言字符常量定義規則的相關問題不太懂,沒關系,今天就由我來為大家分享分享c和指針課后題答案中文以及c語言字符常量定義規則的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
C語言為什么要引入指針
C語言是貝爾實驗室兩位大師在研發UNIX的時候順帶研發的副產品,當初發明C語言是為了寫操作系統,傳統上寫操作系統都只能用匯編語言,因為操作系統是直接針對硬件的,高級語言不具備這個功能,匯編語言實在是不好用,編寫程序的效率太低而且無法移植,于是兩位大師就想到了發明一種介于匯編語言和高級語言之間的,可以直接針對硬件的語言,最初第一版叫B語言,然后又進行了改進就叫C語言,其中指針就是一個重要發明,在C語言中指針的意思是指向某個變量的地址,這個變量可以是各種數據類型,顯然這是可以直接操作硬件的。最初C語言并沒有單獨公開發表推廣,后來隨著UNIX的流行而推廣流行開了。
c語言指針詳細講解
C語言中指針是一種數據類型,指針是存放數據的內存單元地址。
計算機系統的內存擁有大量的存儲單元,每個存儲單元的大小為1字節,為了便于管理,必須為每個存儲單元編號,該編號就是存儲單元的“地址”,每個存儲單元擁有一個唯一的地址。
指針變量除了可以存放變量的地址外,還可以存放其他數據的地址,例如可以存放數組和函數的地址。
c語言指針類的題可以不用指針嗎
指針使用非常的靈活,當然適用的范圍也非常的廣,但是有時使用不當會造成內存的泄漏,而且指針還有指向指針的指針甚至3級或更多的級的指針,切忌不要使用太多級的指針非常的危險。而且還會把你弄糊涂,當然指針還有指針函數,指針數組等。但是無非就是指向的一個內存地址,而且能對內存地址進行操作。 對于熟悉的同志,經常用,可能有一種想使用它(指針)的沖動,而且越用越順手,越用越想用. 對于不是很熟悉的同志.陌生,神秘,不敢用,怕出事,建議多用,大不了死機重裝. 個人認為,如果了解一點匯編數據尋址方式,可能使用時會更勇敢一點. 還有,提到指針不得不說說鏈表,鏈表的優點我就不多說了,鏈表在c語言中是很重要的,但是要建立鏈表和插入刪除等操作就不得不用指針。
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語言指針包括
【C】C語言指針(包括:指針與數組、指針與字符串、指針與函數)
指針的概念
在計算機中,所有的數據都是存放在存儲器中的。一般把存儲器中的一個字節稱為一個內存單元,不同的數據類型所占用的內存單元數不等,例如int型占4個內存單元,char型占1個內存單元。為了正確地訪問這些內存單元,必須為每個內存單元編上號,根據一個內存單元的編號即可準確地找到該內存單元。內存單元的編號也叫做地址。既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。可以說,指針就是內存地址。
c語言指針變量不能進行運算的符號
C語言指針變量可以進行運算,是指針所指地址的加減運算。
關于c和指針課后題答案中文到此分享完畢,希望能幫助到您。