網站首頁 編程語言 正文
先上一個例子:
結果:?
1、sizeof與strlen
char c[] = “abc\0cba”;
問題1:sizeof(c) = ?
問題2:strlen(c) = ?
問題3:執行free(c);之后會有什么后果?
解答1:8
解答2:3? ?(判斷字符串a的長度,這個長度不包括"\0")
解答3:段錯誤
2、short a[100],sizeof(a)返回??
A 2 ? ? B 4 ? ? ? C 100 ? ? ? D 200 ? ? ? ?E 400?
答案:D
段錯誤:指訪問的內存超出了系統所給這個程序的內存空間。
匯編語言的程序設計是分4個段來設計的,即用來放數據的數據段DS,臨時存放數據的堆棧段SS、存放程序代碼的代碼段、存放附加數據的附加段,每一段的最大存儲空間為64KB,跳轉指令、程序調用指令在轉移到地址沒有超過64KB地址空間范圍的叫段內轉移,超出64KB地址空間范圍的叫段間轉移。這就是段內和段間的含義。?
3、下列程序在32位 linux 或 unix 中的結果是什么?
void func(char *str)
{
printf(" %d", sizeof(str));
printf(" %d", strlen(str));
}
int main()
{
char a[] = "123456789";
printf(" %d", sizeof(a));
printf(" %d", strlen(a));
func(a);
getchar();
return 0;
}
結果: 10 9 4 9
在C/C++里數組作為參數時傳遞的實際上是指向數組第一個元素的指針,因此sizeof(str)返回的是指針的大小,即4。所有的指針大小都是4。
下列程序在 64?位 linux 或 unix 中的結果是什么?
結果: 10 9 8?9
為什么在64位系統中指針的大小是8,而32位的卻是4??
64位系統,這個位數指的是CPU 里面的通用寄存器的數據寬度為64位,也就是說一個地址占二進制位數是64,所以sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8
32位系統,同理,他的一個地址占32位二進制空間,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4
其實明白了兩個系統的尋址原理就能明白,大體就是這個原因。地址跟系統有關,但是基本數據類型占的大小是由C語言本身決定。?
4、sizeof與strlen的區別本質上而言
不同點:
(1)sizeof是一個運算符,它用類型作為參數,而strlen只是C庫提供的一個函數,他用來計算以’/0’結果的字符串的長度,即它的參數只能是char*。
(2)strlen的結果要在運行的時候才能計算出來,是用來計算字符串的實際長度,而sizeof的結果是在編譯的時候就計算過的,是類型或變量占內存的大小。 注意:sizeof計算的是類型或者變量占內存的大小。
相同點:
(1)它們相同的地點就只是返回值,都是一個size_t類型的值。
原文鏈接:https://blog.csdn.net/weibo1230123/article/details/82822976
相關推薦
- 2022-06-09 ASP.NET?Core記錄日志_實用技巧
- 2023-07-07 maven項目如何引入項目本地jar包
- 2022-08-01 Flask-Sqlalchemy的基本使用詳解_python
- 2022-11-01 zxing二維碼位矩陣轉換成Bitmap位圖的實戰教程_Android
- 2022-11-26 .Net中Task?Parallel?Library的進階用法_實用技巧
- 2023-07-29 highcharts中gantt甘特圖的使用
- 2022-05-25 version `GLIBC_2.18‘ not found
- 2022-06-19 微信小程序前端如何調用python后端的模型詳解_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同步修改后的遠程分支