網站首頁 編程語言 正文
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“,但為什么最后打印出來就是亂碼了?
我們先看棧區中內存的分配
當string函數執行完時,它創造的棧幀就被銷毀了,可這里的銷毀并不是將其的數據清零,而是將其設置為可覆蓋的數據
但為什么最后又亂碼了呢?
那是因為printf也是一個函數,也要創造空間,所以將string所創造的棧幀給覆蓋了
所以我們就完美地解釋了為什么會亂碼的原因
void
一.可做為函數的通用接口
例:
運用:char* s = (char*)malloc(sizeof(char));
原因:
void類型的指針可被任意類型的指針接受,也可以接受任意類型的指針
二.void不能修飾變量
原因:編譯器不知道給變量分配多少空間
三.void修飾函數返回值
占位符,告知用戶不用返回值
假如不加,默認是int類型的返回值
const
const修飾的變量不能直接被修改,但能通過指針
但是const仍有它的意義
1.讓編譯器提前告訴我們不該修改的變量被修改了
2.讓看源碼的童鞋知道這里不能被修改
總結
原文鏈接:https://blog.csdn.net/m0_61719175/article/details/122292073
- 上一篇:C語言函數指針詳解_C 語言
- 下一篇:c++中的bind使用方法_C 語言
相關推薦
- 2022-07-01 Python?Pandas中合并數據的5個函數使用詳解_python
- 2022-05-16 C#實現的4種常用數據校驗方法小結(CRC校驗,LRC校驗,BCC校驗,累加和校驗)_C#教程
- 2023-01-11 ubuntu20.04虛擬機無法上網的問題及解決_Linux
- 2022-04-26 Android?Jetpack?Compose實現列表吸頂效果_Android
- 2022-12-07 利用C語言模擬實現qsort,strcpy,strcat,strcmp函數_C 語言
- 2022-07-30 C#程序終極調試實現windbg的時間旅行_C#教程
- 2022-07-21 Gitee:使用ssh提交代碼卻提示:DeployKey does not support push
- 2022-12-15 Golang控制協程執行順序方法詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支