C语言《C Primer Plus》学习总结

前言

本系列将记录学习《C Primer Plus》这本书中的一些心得笔记,欢迎大家相互交流,一起进步,本文是作者首次编写希望大家多多支持,哪里有不好的地方也希望各位看官多多指出。

相关概念

常量:一些数据类型在程序使用之前预先设定好,在整个程序运行过程中没有变化,称为常量。
变量:一些数据类型在程序运行期间可能会被改变或被赋值,称为变量。
:最小的存储单元是位(bit),可以储存0或1,位是计算机内存的基本构建块。
字节:Byte是计算机常用的存储单位,几乎所有的机器,一个字节均为8位
:Word是计算机给定的自然存储单位。计算机的字长越大,数据转移越快,允许的内存访问更多。

数据类型

整数

计算机以二进制数字储存整数,例如,整数7以二进制写是111。在8位字节中储存该数字,如图所示。
![图片来源C Primer Plus](https://img-blog.csdnimg.cn/d21e7011d21649858803622b0d2fe058.png

浮点数

整数后加上小数点,该值就成为了一个浮点值。比如7是整数,7.00是浮点数。浮点数的储存方式和整数类型不同,计算机把浮点数分成小数部分和指数部分来表示,分开储存这两部分。
图片来源C Primer Plus

基本数据类型

int类型

int 类型是有符号整型,int类型的值必须是整数

声明int变量

int erns;//声明一个int类型变量,取名为erns;
int hogs,cows,goats;//同时声明多个同类型变量
int hogs = 21;//声明一个int变量hogs,同时赋值为21
int dogs,cats = 94;

这里猜想一下是dogs为94呢?还是cats为94?结果是cats为94,最后一条语句只初始化cats,dogs并未初始化,所以为保证良好的编程习惯,最好一条一句完成一件事。
声明为变量创建和标记存储空间,并未其指定初始值。
图片来源C Primer Plus

其他整型变量

C语言提供3个附属关键字修饰基本整数类型:short、long、和unsigned。
short int类型:占用的存储空间不多于int,常用于较小数值以节省空间。
long 类型:占用的存储空间不少于int
unsigned和signed用于区分是否需要负值。例如int类型可表示的取值范围位:-32768~32767而unsigned int 表示0~65535。
如果要把一个较小的常量作为long类型对待,则可在值的末尾加上l或L后缀,比如:3L。
目前常见的设置是,long long占64位,long占32位,short占16位,int占16或32位。

整数溢出

#include<stdio.h>
int main(void)
{
	int i = 214483647;
	unsigned int j = 4294967295;
	printf("%d,%d,%d\n",i,i+1,i+2);
	printf("%u,%u,%u\n",j,j+1,j+2);
}

会得到的结果是

2147483647 -2147483648 -2147483647
4294967295 0 1

有符号类型和无符号类型溢出可以理解为在其范围内循环。

char 类型

char类型用于储存字符(字母或标点符号)。C语言把1字节定义位char类型占用的位(bit)数。

声明char类型

char abc;//声明一个char类型的变量,名位abc,声明方式均相同。
char def,hij;
abc = 'A';//用单引号括起来的单个字符被称为字符常量。如果缺少单引号,则被认为是变量
def = A;//这是一种错误的表达方式。

在ASCII码中,A与65相对应,所以,字符是以数值形式储存的,所以也可以用数字代码值来赋值。

char abc = 65;//等效于char abc = 'A';

但是不建议使用这种方式进行编程,因子这样的前提是可以使用ASCII码,如不可以使用,则出现问题。

浮点数类型

浮点数类型有float、double和long double类型。浮点数表示类似于科学计数法。
图片来源于C Primer Plus
指数计数法是计算机中的写法,e后边的数字表示10的指数。
C标准规定,float类型必须至少表示6位有效数字,取值范围至少是10^(-37) 至10^(37)。
C 语言提供另一种浮点类型是double(双精度)。double和float类型的最小取值范围相同,但是double可以表示10位有效数字,所以double所占字节长度相对长一些。

浮点型变量声明

float abc,def;
double xyz;
float abc = 1.11e-32;

打印数据类型

C语言中可以使用printf()函数打印数据类型的值。%d指明在这一行中打印整数的位置,%d称为转换说明,指定了printf()使用什么格式来显示一个值。

int a = 10;//声明一个int类型变量并初始化位10
printf("This number is:%d",a);//会显示This number is:10
char b = 'A';
printf("The code for %c is %d\n",b,b);//The code for A is 65
float c = 3.145;
printf("c = %f",c);//c = 3.145
printf("c = %.2f",c);//c = 3.14 只保留小数点后两位有效数字
printf("%f can be written %e\n",c,c);//e表示指数写法

在使用printf()函数时,传递给函数的信息被称为参数,转换字符的数量要与后面的参数一一对应。

printf("%d dogs ate %d chicks",dogs,chicks);//要一一对应。,也要保证数据类型相对应,用%d来表示浮点数是不对的。
printf("%d dogs ate %d chicks",dogs);//这是不正确的。

刷新输出

printf()何时把内容发送到屏幕上?刚开始printf()将输出发送到缓冲区(buffer)的中间存储区域,然后缓冲区的内容不断被发送到屏幕上。
C规定:当缓冲区满、遇到换行字符(\n)或需要输入的时候(调用scanf())时将缓冲区把数据发送到屏幕。

#include<stdio.h>
int main(void)
{
	int a;
	printf("hello world\n");//遇到换行符会刷新缓冲区,屏幕正常输出。
	scanf("%d",&a);//输入时刷新缓冲区,屏幕正常输出。
	return 0;//返回时刷新缓冲区,屏幕正常输出。
};

何时不会刷新缓冲区,即没有输出呢?

#include<stdio.h>
int main(void)
{
	printf("hello world");//没有换行符
	while(1);//程序进入死循环,没有输入也没有返回值,此时屏幕不会打印helloworld
}

更新于2022-12-18 23:11。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值