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;
}

在这里插入图片描述

#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 没啥感觉
我反而觉得比原来慢了。但我这次都没有完全安装,怎么比原来还慢,我无语了。
界面好看了点,顺眼很多了。
然后我昨天写的笔记丢了。我气!!!

我今天还得再看一遍讲解再写一遍,不过主要是还是我没懂,要是都会也不用记笔记了。

我下次再删废纸篓里的笔记我是*** 。

今天微博还中奖了,难道是因为节日快乐???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值