剖析C語言關(guān)鍵字之void,const,return
return
首先我們弄清楚c語言內(nèi)存分配的方式
然后我們看一段代碼:
#pragma warning(disable:4996) #include<stdio.h> char* string() { char arr[] = "hello world"; return arr; } int main() { char* s = string(); printf("%s", s); return 0; }
當(dāng)運行到printf函數(shù)的時候,s指向的內(nèi)容仍是”hello world“,但為什么最后打印出來就是亂碼了?
我們先看棧區(qū)中內(nèi)存的分配
當(dāng)string函數(shù)執(zhí)行完時,它創(chuàng)造的棧幀就被銷毀了,可這里的銷毀并不是將其的數(shù)據(jù)清零,而是將其設(shè)置為可覆蓋的數(shù)據(jù)
但為什么最后又亂碼了呢?
那是因為printf也是一個函數(shù),也要創(chuàng)造空間,所以將string所創(chuàng)造的棧幀給覆蓋了
所以我們就完美地解釋了為什么會亂碼的原因
void
一.可做為函數(shù)的通用接口
例:
運用:char* s = (char*)malloc(sizeof(char));
原因:
void類型的指針可被任意類型的指針接受,也可以接受任意類型的指針
二.void不能修飾變量
原因:編譯器不知道給變量分配多少空間
三.void修飾函數(shù)返回值
占位符,告知用戶不用返回值
假如不加,默認(rèn)是int類型的返回值
const
const修飾的變量不能直接被修改,但能通過指針
但是const仍有它的意義
1.讓編譯器提前告訴我們不該修改的變量被修改了
2.讓看源碼的童鞋知道這里不能被修改
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法
本篇文章是對求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05