剖析C語言關鍵字之void,const,return
return
首先我們弄清楚c語言內存分配的方式
然后我們看一段代碼:
#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; }
當運行到printf函數的時候,s指向的內容仍是”hello world“,但為什么最后打印出來就是亂碼了?
我們先看棧區(qū)中內存的分配
當string函數執(zhí)行完時,它創(chuàng)造的棧幀就被銷毀了,可這里的銷毀并不是將其的數據清零,而是將其設置為可覆蓋的數據
但為什么最后又亂碼了呢?
那是因為printf也是一個函數,也要創(chuàng)造空間,所以將string所創(chuàng)造的棧幀給覆蓋了
所以我們就完美地解釋了為什么會亂碼的原因
void
一.可做為函數的通用接口
例:
運用:char* s = (char*)malloc(sizeof(char));
原因:
void類型的指針可被任意類型的指針接受,也可以接受任意類型的指針
二.void不能修飾變量
原因:編譯器不知道給變量分配多少空間
三.void修飾函數返回值
占位符,告知用戶不用返回值
假如不加,默認是int類型的返回值
const
const修飾的變量不能直接被修改,但能通過指針
但是const仍有它的意義
1.讓編譯器提前告訴我們不該修改的變量被修改了
2.讓看源碼的童鞋知道這里不能被修改
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!