== 关于 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 没啥感觉
我反而觉得比原来慢了。但我这次都没有完全安装,怎么比原来还慢,我无语了。
界面好看了点,顺眼很多了。
然后我昨天写的笔记丢了。我气!!!
我今天还得再看一遍讲解再写一遍,不过主要是还是我没懂,要是都会也不用记笔记了。
我下次再删废纸篓里的笔记我是*** 。
今天微博还中奖了,难道是因为节日快乐???