1 数据类型的介绍:
在C语言中, 在定义每个变量之前都必须定义其数据类型。字符型 char:
Unsigned char(无符号字符型)
Signed char(有符号字符型)
短整型 short:
Unsigned short[int](有符号短整型)
Signed short[int](无符号短整型)
整形 int:
Unsigend int(无符号整型)
sigend int(有符号整型)
长整型 long:
Unsigend long[int](无符号长整形)
Sigend long[int](有符号长整型)
长长整型 longlong(从C99中引入的):
Unsigend longlong[int](无符号长长整型)
Sigend longlong[int](有符号长长整型)
浮点型 :
float
double
long double
2 Sigend和Unsigend:
那为什么分为Sigend和Unsigend呢,它们之前有什么区别吗?
1:Sigend是表示负数而Unsigend则表示为正数
2:它们所对应的范围有所不同比如Sigend short[int]它所表示的范围是:-32768~32767而Unsigned short[int]所表示的范围是:0~65535。它们的范围为什么会有这么大的差别呢?其实有符号位在内存存储的时候第一位表示符号位而无符号反之所以它们2倍之差
3:Sigend在敲代码的时候可以写或者不写但是Unsigend必须要写
3 sizeof:
我们既然知道了有哪些数据类型那我觉得应该的了解计算每个数据类型的长度(单位是字节)它是用什么来计算的呢?那下面我们就来讲讲sizeof这个函数来计算的但是在使用他之前就必须要了解它的语法规则
1:sizeof 表达式
2 :sizeof(数据类型)
1:sizeof如果后面是表达式则可以不要加()且并不要实际去计算括号里面的表达式只需要根据表达式的类型来计算它们的大小
#include <stdio.h>
int main()
{
int a = 9 , b = 3;
short c = 3;
printf("%d\n", sizeof (c=a+1)); //答案:2
printf("%d\n", sizeof 3 + 4); //答案:8
printf("%d\n", sizeof (3 + 4)); //答案:4
printf("%d\n", sizeof(c)); //答案:2
return 0;
}
我来解释一下为什么不同的式子会有不同的答案呢,我来一一解释
1:因为a式int型所以它是6个字节然后+1就是等于7字节所以你们很多人会是这个答案但为什么不是呢原因就是short所占的字节是2个(第五个答案就是因为c是short型)而赋值号的右边则为7所以吧后面的5位给截断。
2:为什么第三个和这个会不同呢因为因为第二个会先sizeof(3)这个结果算出来(3是个int型而且占4个字节)然后加加就等于8了而第三个就是加了括号
2:sizeof的计算结果是sizeof_t类型的
C语言规定sizeof运算符的返回值是无符号(因为sizeof返回值是字节而字节没有负号所以只能是无符号的)但没有规定是什么类型的。那C语言不是有好多无符号,列如Unsigend long[int] ,Unsigned short[int], Unsigend int ,Unsigned char那这样在输出的时候不是每一个占位符类型都不一样而这又不利于程序的可移植性,所以C语言就提供了一种解决方法,它创造了一种类型别名sizeof_t,用于统一表示sizeof的返回值类型,那以后不管是什么无符号类型它的输出占位符都只会是%zd。
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof (short));
printf("%zd\n", sizeof(int );
printf("%zd\n", sizeof (long));
printf("%zd\n", sizeof(long long));
return 0;
}
4 变量:
变量顾名思义就是可以任意改变的量,那我们想一下不可以改变称为什么其实就是常量。那变量是怎么创建呢,在上面我们讲过数据类型其实就是来定义变量的
创建变量的时候肯定要赋值那第一次赋值就是初始值
int a = 8;
变量分为全局变量和局部变量。全局变量的定义:全局变量是程序中定义在所有函数(包括 main 函数)之外的任何变量。全局变量的作用域是程序从变量定义到整个程序结束的部分。这意味着全局变量可以被所有定义在全局变量之后的函数访
如果在函数中全局变量和局部变量的名字相同那输出的结果则以局部变量为准。