文章目录
- sizeof运算符内容
- 关于基本概念的问题
- 关于一些语句的理解和分号的注意
- 字符的理解
- 关于输出格式的扩展
本文内容摘自C技能树一些优秀的博主
sizeof运算符内容
关于基本概念的问题
sizeof是C语言的关键字,它用来计算变量(或数据类型)在当前系统中占用内存的字节数。
sizeof不是函数,而是运算符,之所以产生 ’ sizeof是函数 ‘ 这样的疑问是因为sizeof的书写确实有点像函数。
- sizeof在使用的时候看上去像是一个函数(因为其后面有一对小括号),但他却是一个运算符。他的使用方法有以下3种:
a) sizeof(变量名)。
b) sizeof 变量名。
c) sizeof(数据类型名)。
注意:只有sizeof后面是变量名时才可以去括号。那为什么是数据类型的时候不可以去掉括号呢?
Alexxinlu 2021-12-06
@Struggling_white sizeof是一个运算符,理论上来说是不需要括号的。
但是不加括号在某些情况下会造成二义性,比如下面这个例子:
sizeof int * + 1
他指的是 (sizeof (int*)) + 1 还是 (sizeof(int)) * (+1) 呢?
所以为了避免这种潜在的二义性,C语言规定如果一个数据类型名(例如:int)出现在一个表达式中就需要加上括号。sizeof(int)是对的,而sizeof int会报错。参考:Why sizeof int is wrong, while sizeof(int) is right?- sizeof的返回值类型为size_t。
关于一些语句的理解和分号的注意
//size_t len = sizeof(str) / sizeof(char);的理解
#include <stdio.h>
int main(int argc, char** argv)
{
char str[] = "Hello World!";
size_t len = sizeof(str) / sizeof(char);
size_t i;
for (i = 0; i < len; ++i)
printf("str[] is %c\n",str[i]);
return 0;
}
/*
sizeof(char)是一个字符的长度
sizeof(str)是上面个整个字符串的长度
所以size_t len 就是整个字符串的个数
*/
//关于分号的问题。
int i=0;
for(;i<10;i++);//此时分号就是空语句,但是多了这个分号,就可以把下面的printf语句踢出for循环
printf("%d",i);//输出结果为10且只输出一次
//运行结果 10
int i=0;
for(;i<10;i++)
printf("%d",i); //如果没有上面的分号,就会输出10个数字,分别为0123456789
//运行结果 0123456789
总结:要重视分号的影响,分号可以多,但是不能少(语法层面上),多了是个空语句,但可能作切割作用(功能层面上)。
字符的理解
#include <stdio.h>
int main(int argc, char **argv) {
char ch;
printf("请输入一个字符:");
ch = getchar();/*getchar、putchar专门用于字符输入输出;
getchar()写法上要写为 变量 = getchar();
putchar()用法为putchar(变量);
putchar('\n')输出一个控制符;
putchar('字母/字符');输出字母/字符;
*/
if(ch<=31)
{
printf("这是一个控制字符或通讯专用字符!\n");
}
}
//注解ch = getchar();和scanf("%d",&n)具有相同的效果,都会调用DOS命令窗口,等待用户键入信息,按下enter确认输入之后计算机才会接受到输入的信息,并进行后续的操作。但对前者来说是专门为字符输入设计的,而后者可以输入很多数据类型。
DOS是Disk Operation System(磁盘操作系统)的简称,是个人计算机上的一类操作系统。它直接操纵管理硬盘的文件,一般都是黑底白色文字的界面。说得简单些,DOS就是人与机器的一座桥梁,是罩在机器硬件外面的一层“外壳”,有了DOS,就不必去深入了解机器的硬件结构,也不必去死记硬背那些枯燥的机器指令。只需通过一些接近于自然语言的DOS命令,就可以轻松地完成绝大多数的日常操作。此外,DOS还能有效地管理各种软硬件资源,对它们进行合理的调度,所有的软件和硬件都在DOS的监控和管理之下,有条不紊地进行着自己的工作,但是在操作不慎情况下也会死机。
关于输出格式的扩展
C语言中输出格式 %m.nf 的意思
m:表示宽度
.n:表示精度
假设,
i=10.1;
printf("%5.2f",i);
输出结果为 10.10(m=5,其中空格占1位,小数(n)占2位)