== 關于 sizeof 有話說==
關于sizeof
計算特定字元串所占空間的大小 機關是位元組
1.不是函數隻是一個操作符
(下面的例子說明)
1.sizeof //有的時候()可以去掉例如sizeof a 但隻有是符号的時候才行
例子裡面的int 就不能去括号哈!
不能寫成 sizeof int
2.一個表達式放在函數參數部分的時候會參與計算
而sizeof ()裡面的表達式不會參與計算
例子一示範
#include<stdio.h>
int main()
{
int a = 3;
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
return 0;
}
#include<stdio.h>
int main()
{
int a = 3;
printf("%d\n", sizeof a);
printf("%d\n", sizeof(int));
例子二示範
#include<stdio.h>
int main()
{
short s = 3;
int a = 5;
printf("%d\n", sizeof(s = a + 5));//2
printf("%d\n", s);//3
return 0;
}
具體解釋
test.c ====== test.exe
轉換之間
需要編譯+連結
編譯的時候2已經算出來了
但是s=a+5是在程式運作的時候才計算
//即為産生了exe之後運作才計算的15
但是編譯的時候已經處理掉了
那個時候不放 sizeof(s = a + 5)
而隻放了2
sizeof 處理時機遠遠早于計算時間
就是這個意思啦!
2. \0計入sizeof大小
== 關于 strlen 有話說==
求解字元串長度的函數
計算的時候必須要遇到\0 才會停下來,否則要麼出現随機值(根本原因是後面的一串随機值裡面有\0),要麼系統崩潰掉。
//下面這個一定要深刻了解
#include<stdio.h>
#include<Windows.h>
#pragma warining(disable:4996)
int main()
{
char arr1[] = { 'b', 'i', 't' };
char arr2[] = { "bit"};
printf("%d\n", sizeof(arr1)); //3
//printf("%d\n", strlen(arr1));//随機值
printf("%d\n", sizeof(arr2)); //4
printf("%d\n", strlen(arr2)); //3
system("pause");
return 0;
}
複盤
\0是一個結束标志 ,不計入z字元串長度(故而自然也不是字元串的内容) 沒有\0 無法準确計算字元串長度
\0在size of 中是計入空間大小的
(單引号字元沒有\0,雙引号字元串裡面自帶\0) 這句話其實很多餘,仔細想想,都是單引号字元了,自然也是隻有一個咯
經常搞混的一個概念
strlen 求字元串個數,限定在是字元的數組裡面使用(char)
sizeof(arr)/sizeof(arr[0]) 通常可以求整型數組中元素的個數。
如果非要用這個表達式求字元串的個數,實際上會把\0也算進去
以下都是原來寫的一點牢騷,因為這是一篇修改過的文章,但下面的又不想删掉,别看了(捂臉)
新版的vs2019 沒啥感覺
我反而覺得比原來慢了。但我這次都沒有完全安裝,怎麼比原來還慢,我無語了。
界面好看了點,順眼很多了。
然後我昨天寫的筆記丢了。我氣!!!
我今天還得再看一遍講解再寫一遍,不過主要是還是我沒懂,要是都會也不用記筆記了。
我下次再删廢紙簍裡的筆記我是*** 。
今天微網誌還中獎了,難道是因為節日快樂???