C语言查漏补缺(一)

关于sizeof和strlen的区别

int main()
{
	char str[] = "hello bit";
	//[hello bit\0]
	printf("%d %d\n", sizeof(str), strlen(str));
	//10 9
	// sizeof——操作符——计算变量/类型所占内存大小,单位是字节(包括\0)
	//strlen——函数——求字符串长度的,找\0之前出现的字符个数(不包括\0)
	return 0;
}

补充:

int main()
{
	char acX[] = { "abcdefg"};//[abcdefg\0]
	char acY[] = { 'a','b','c','d','e','f','g' };//[abcdefg]
	return 0;
}

关于二维数组

二维数组的行可以省略,列不可以省略

int main()
{
	int a[2][] = { {0,1,2},{3,4,5} };//no
	int a[][3] = { {0,1,2},{3,4,5} };//yes
	int a[2][4] = { {0,1,2},{3,4},{5} };//no
	int a[][3] = { {0,,2},{},{3,4,5} };//no
	return 0;
}

goto语句

某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程
注:goto 语句只能在一个函数范围内跳转,不能跨函数

for(...)
    for(...)
   {
        for(...)
       {
            if(disaster)
                goto error;
       }
   }
    …
error:
 if(disaster)
         // 处理错误情况

两个字符串比较及数组

两个字符串比较用 strcmp();
两个字符比较可以用 == ;
数组名表示数组首元素地址,不用取地址;

break与continue

break用于跳出循环
continue用于跳过continue后面的代码,回到前面

getchar()与putchar()

int main()
{
	//EOF——end of file 文件结束标志
	//ctrl+z——getchar()读取结束
	int ch = 0;//getchar()返回值为ASCII码值,所以用int
	while ((ch=getchar()) !=EOF)
	{
		putchar(ch);
	}
	return 0;
}
int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("请确认密码(Y/N):>");
	//清理缓冲区
	//getchar();——处理'\n'
	//清理缓冲区中多个字符
	int tmp = 0;
	while ((tmp = getchar()) !='\n')
	{
		;
	}
	int ch = getchar();
	if (ch == 'Y')
		printf("确认成功\n");
	else
		printf("确认失败\n");
	return 0;
}

在这里插入图片描述

循环语句中的前置++和后置++

循环语句中的前置++和后置++是一样的效果

rand函数产生随机数的用法

要在主函数开始时设置时间戳
srand((unsigned int)time(NULL));

指针在不同操作系统下所占字节大小

在32位下,占4个字节
在64位下,占8个字节

二叉树简单计算

n0:度为0的结点数(也称叶子接结点)
n1:度为1的结点数
n2:度为2的结点数
二叉树中:n0=n2+1
结点总数N=度数*该度数对应的结点数+1

ASCII码值相关问题

表达式9+‘0’的值是字符9的ASCII码值
表达式’A’+32的值是字母a的ASCII码值
表达式’a’-32的值是字母A的ASCII码值
'0’的ASCII码值是48

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值