为了这测算某些数据类型,在特定编译器下所占的字符,c语言中不能出现在标识符中的是提供的运算符是?

添加static关键字部分

int的长度会跟随CPU的不同而发生变化,比如:

  • 16位CPU中:int默认两个字节,16位(int规定的最小值)
  • 32位CPU中:int默认四个字节,32位;

所以通常情况下使用C头文件<stdint.h>中提供的数据类型:

同时,该头文件提供了数据类型的最大最小值宏定义,如下:

  • 无符号整数溢出:最高位进位,因为存储空间大小限制,超出的部分直接舍弃,所以会从0开始重新计数。
  • 有符号整数溢出:数据位进位,导致符号位变为1,数据位清零,所以会从对应的最小的负数开始重新计数。

详细说明参考博文:整数在计算机中的存储

  • 变量:在程序运行过程中会改变,本质就是内存中的一段存储空间;
  • 常量:运行过程值不会改变;

局部变量:在函数内部定义,函数结束后变量自动销毁;

全局变量:在函数外部定义,整个文件内部都可以使用该变量,程序结束后销毁;

外部变量:使用extern修饰,表示该变量在其它文件中定义为全局变量;

静态变量:使用static修饰,表示该变量在定存中只有一份定义;

易变变量:使用volatile修饰,表示该变量是易变的,防止编译器优化;

2. 常量的两种定义方式

① 使用const修饰符,作为只读变量:

字面值的数据类型会被编译器自动识别:整数默认int,浮点数默认double,如果存不下则自动寻找更大的类型存储。

可以在数值后面加后缀,显示指出要使用的数据类型:

  • float类型的精度:能表示小数点后6位;
  • doubel类型的精度:能表示小数点后10位;

因为float只能存储小数点后6位的精度,所以肯定错误。

如果将2.0e20改为2.0e4,则运行结果为:

3. 浮点数的存储所带来的问题

因为浮点数不能精准的存储,所以需要在编程时注意。

常用的一些占位符如下表:

使用e计数法输出浮点数
无符号十六进制输出整数

%转换字符之间插入修饰符可修饰基本的转换说明。

scanf的作用:将用户从键盘输入的字符串转换为字符、字符串、整数、浮点数。

特别注意!输入参数是变量的地址

//这种用法,在输入的时候必须将非占位符也输入

scanf函数使用空白(换行符、制表符、空格)把输入分成多个字段,在依次把转换说明和字段匹配时跳过空白。

① 在printf中,*修饰符用来代替字段宽度,由变量指定

② 在scanf中,*修饰符表示跳过这个转换说明符。

C语言中,两个整数之间用/运算,结果也是整数。

2. C语言中的真和假

  • 真:非0,除0之外都是真,一般用1表示;

3. 运算符优先级(非常重要)

  • sizeof运算符:返回结果是size_t类型(无符号整型,由编译器使用typedef替换为基本数据类型,在stddef.h中定义,包含在stdio.h里)
  • 求模运算符:%(只能用于整数、不能用于浮点数)
  • 自增运算符:++(分为前缀和后缀)
  • 自减运算符:–(分为前缀和后缀)

特别注意!case之后的标号只允许字面常量,且是整型。(变量、const只读变量、浮点数都是错误的)。

函数是C语言的基本单位。

函数返回值类型 函数名(函数参数列表);
函数返回值类型 函数名(函数参数列表)

解决同类型数据的存储问题。

不完全初始化,未被初始化的元素为0:

不初始化,所有元素都是垃圾值

//原理:第一个元素初始化为0,属于不完全初始化,所以全部为0

③ 数组可以进行的操作:

//一个3行4列的二维数组

整体赋值的另外一种写法:

物理内存是线性连续的,所以多维数组本质并不存在。

3行4列的二维数组,本质上是3个元素一维数组,只不过每个元素也是含有4个小元素的一维数组。

static关键字表示静态的,可以用来修改变量和函数。

static关键字修饰变量后,表示该变量是静态的,无论定义多少次,在内存中只有一份

static修饰静态函数,表示此函数只能在本文件中使用。

  • 按照程序的分割符进行输入

    scanf("%d,%d",&a,&b); // 我们应该时输入12,34这种情况,因为scanf中试是逗号作为分割符,所以数据中也应该使用相同的符号作为分割符

我要回帖

更多关于 c语言中不能出现在标识符中的是 的文章