網站首頁 編程語言 正文
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-06-21 使用Apache?Hudi?加速傳統的批處理模式的方法_Linux
- 2022-01-31 為什么要使用3×3卷積?& 1*1卷積的作用是什么?& 對ResNet結構的一些理解
- 2023-10-11 在MyBatisPlus中添加分頁插件
- 2022-06-11 FreeRTOS進階之系統延時完全解析_操作系統
- 2022-08-28 flask?route對協議作用及設計思路_python
- 2022-06-22 C語言詳解Z字形變換排列的實現_C 語言
- 2022-01-15 面試官:[‘1‘, ‘2‘, ‘3‘].map(parseInt)的結果是什么?為甚?我:[1, 2
- 2022-04-28 Python模塊pexpect安裝及使用流程_python
- 最近更新
-
- 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同步修改后的遠程分支