天天看點

sizeof&strlen== 關于 sizeof 有話說== 具體解釋== 關于 strlen 有話說==複盤經常搞混的一個概念

== 關于 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;
}
           
sizeof&amp;strlen== 關于 sizeof 有話說== 具體解釋== 關于 strlen 有話說==複盤經常搞混的一個概念
#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;
}
           

sizeof&amp;strlen== 關于 sizeof 有話說== 具體解釋== 關于 strlen 有話說==複盤經常搞混的一個概念
具體解釋

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 沒啥感覺

我反而覺得比原來慢了。但我這次都沒有完全安裝,怎麼比原來還慢,我無語了。

界面好看了點,順眼很多了。

然後我昨天寫的筆記丢了。我氣!!!

我今天還得再看一遍講解再寫一遍,不過主要是還是我沒懂,要是都會也不用記筆記了。

我下次再删廢紙簍裡的筆記我是*** 。

今天微網誌還中獎了,難道是因為節日快樂???

繼續閱讀