剖析C語(yǔ)言關(guān)鍵字之void,const,return
return
首先我們弄清楚c語(yǔ)言內(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)運(yùn)行到printf函數(shù)的時(shí)候,s指向的內(nèi)容仍是”hello world“,但為什么最后打印出來(lái)就是亂碼了?


我們先看棧區(qū)中內(nèi)存的分配
當(dāng)string函數(shù)執(zhí)行完時(shí),它創(chuàng)造的棧幀就被銷毀了,可這里的銷毀并不是將其的數(shù)據(jù)清零,而是將其設(shè)置為可覆蓋的數(shù)據(jù)
但為什么最后又亂碼了呢?
那是因?yàn)閜rintf也是一個(gè)函數(shù),也要?jiǎng)?chuàng)造空間,所以將string所創(chuàng)造的棧幀給覆蓋了

所以我們就完美地解釋了為什么會(huì)亂碼的原因
void
一.可做為函數(shù)的通用接口
例:

運(yùn)用:char* s = (char*)malloc(sizeof(char));
原因:
void類型的指針可被任意類型的指針接受,也可以接受任意類型的指針
二.void不能修飾變量
原因:編譯器不知道給變量分配多少空間
三.void修飾函數(shù)返回值
占位符,告知用戶不用返回值
假如不加,默認(rèn)是int類型的返回值
const
const修飾的變量不能直接被修改,但能通過(guò)指針

但是const仍有它的意義
1.讓編譯器提前告訴我們不該修改的變量被修改了
2.讓看源碼的童鞋知道這里不能被修改

總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
C++11中l(wèi)ambda、std::function和std:bind詳解
C語(yǔ)言實(shí)現(xiàn)C++繼承和多態(tài)的代碼分享
剖析C語(yǔ)言關(guān)鍵字之void,const,return
IOS開(kāi)發(fā)之UIScrollView實(shí)現(xiàn)圖片輪播器的無(wú)限滾動(dòng)

