C语言知识小计
C语言知识小计
基础——指针前
1 |
|
以上代码为例基础解析
- 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。
- printf() 用于格式化输出到屏幕。printf() 函数在 “stdio.h” 头文件中声明。
- stdio.h 是一个头文件 (标准输入输出头文件) , #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
- return 0; 语句用于表示退出程序。
%占位符的用法 如: printf(“你的名字是 %s , 你的年龄是 %d”,name,age);
C语言中的字符串结束标志是\0
printf的各种输出方式
1 | int main() { |
效果:
printf 函数使用 %c 打印 char 类型的字符,使用 %d 和 %u 则打印其对应的 ASCII 码(其中 %d 打印带符号数,%u 打印无符号数)。signed char 和 unsigned char 使用 hh 说明其长度。
数据类型:
c中的布尔值是_Bool
一个字节等于八个比特位(1Byte == 8bit),但在c语言中并没有具体定义一个字节等于多少比特位,一个字节被定义为连续比特位,具体大小由实现环境决定。不过通常我们约定俗成是一个字节等于八个比特位。
*C 标准只规定一个数据类型的具体尺寸(其他数据类型都是规定相对范围),那就是char 字符型,C 标准只规定 char 类型占一个字节的空间。 *
整型变量: C 标准规定 short <= int <= long <= long long
C 标准规范存储空间最小的是 _Bool 因为只需要容纳0和1两个数即可
为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。
由于默认 int 是 signed 的,即带符号位的整数(可以表示负数),需要用一半的存储空间来存放负数;而 unsigned int 则是完全用于存放正数,因此 unsigned int 能保存2倍于有符号类型的正整数数据。
用 64 位来存放 long long 的值 ,取unsigned long long,它可以表示的最大值是2^64 -1,所以可以最大可以存放一个20位的十进制整数
进制转换举栗
请写出以下二进制数(补码)对应的十进制数。
A. 0000 1100 -> 2^3 + 2^2 = 8 + 4 = 12
B. 1100 1100 –> -2^7 + 2^6 + 2^3 + 2^2 = -128 + 64 + 8 + 4 = -52
C. 1010 1010 –> -2^7 + 2^5 + 2^3 + 2 = -128 + 32 + 8 + 2 = -86
D. 1111 1111 -> -2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2 + 1 = -1
E. 1000 0000 –> -2^7 = -128
带符号数在内存中以补码的形式保存,正数的补码是其二进制本身,负数则通过对其绝对值的二进制取反加一计算得到(补码)
-8 -> 1000 1000 –> 1111 0111 –> 1111 1000
-126 -> -128 + 2 -> 1000 0000 + 0000 0010 -> 1000 0010
对于逻辑与和逻辑或采用短路求值方式。
字符与字符串
C语言中,最小的整数类型是char。(虽然 char 是字符类型,但它事实上是用于存放整数,因此属于整数类型。)
标准 ASCII 字符表使用 7 位二进制数来表示所有的大写和小写字母,数字 0 到 9、标点符号,以及在美式英语中使用的特殊控制字符;数字 09 对应的十六进制 ASCII 值分别是 3039。
大写字母对应的 ASCII 值第 6 位置 1 则变成对应的小写字母,反之亦然。例如:大写字母 A 的二进制 ASCII 值是 0100 0001,对应的小写字母 a 的二进制则是 0110 0001。此规则适用于所有大小写字母的相互转换
一个字符串在内存中占有多少字节? 字符串的长度加一,因为字符串最后需要加一个‘\0’字符表示结束
如果用char name[10] = “xiaomu”; 定义字符串;则其变量name在内存中的储存形式是:’x’,’i’,’a’,’o’,’m’,’u’,’\0’,’\0’,’\0’,’\0’ 声明了10个字节但是只需7个(包括结尾\0),因此多余的空间用‘\0’进行填充。如果
scanf_s()
教材中的scanf(),在目前Visual Studio版本中已经弃用;
scanf_s() 的功能虽然与scanf() 相同,但却比 scanf() 安全,因为 scanf()在读取字符串时不检查边界,可能会造成内存泄露”;而scanf_s() 在读取数据的时候会检查边界,如果输入的数据达到了所请求的内存空间,则不会再读入数据。
运算符
求余运算符两边要求均为整形。
赋值运算符的结合性是自右向左的;
为什么a = 0 && 1 = b;编译会报错? 少打了一个等号(=),使得表达式先计算逻辑运算符的值为 0 && 1 结果为假(0),便出现了 0 = b 这样错误的赋值语句(我们无法给一个常数赋值)
count != 0 && sum/count 该表达式使用逻辑与(&&)来确保 sum/count 的除数不为 0。
- 本文标题:C语言知识小计
- 本文作者:Ptmapo
- 本文链接:https://1997888.xyz
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!