关于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