一.数据类型
在c语言中数据类型分为
(1)内置类型: int , float , char bool
(2)自定义类型:数组,函数,结构体,枚举
今天我们就详细来说一下内置类型:
int(整形)也包含short(短整形),long (长整形), long long
float(浮点型) 包含 float (单精度) , double(双精度),long double
char(字符型) 以及bool(布尔类型)
先首先说一下布尔类型,在C语言中,我们把0看做假,非0的数看作真
它是用来表示真假的类型,让我们来看看它怎么使用的吧
# include <stdio.h>
# include <stdbool.h>//使用bool必须包含的头文件
int main()
{
bool a = 1;//非0及真
if(a)
{
printf("hello");//a为真,打印hello
}
return 0;
}
这里注意哈:使用bool类型的时候一定要包含<stdbool.h>的头文件
那么每个数据类型都有自己的内存长度大小的,那么我们可以使用sizeof()(用于打印出数据类型所占的长度大小)来看看每个类型的内存长度是多少个字节.
# include <stdio.h>
# include <stdbool.h>
int main()
{
printf("%zd\n",sizeof(int));//4
printf("%zd\n",sizeof(short));//2
printf("%zd\n",sizeof(long));// >= int的字节,有时候是8有时候是4
printf("%zd\n",sizeof(long long));//8
printf("%zd\n",sizeof(char));//1
printf("%zd\n",sizeof(bool));//1
printf("%zd\n",sizeof(float));//4
printf("%zd\n",sizeof(double));//8
return 0;
}
重点:在long(长整形)当中它的内存长度,在32位系统下可能是4个字节,64位是8个字节
Sizeof的知识:
1.sizeof是用于打印出数据类型的内存长度的,返回类型是size_t 一般用%zd打印
2.sizeof后面跟表达式的话是不计算的
# include <stdio.h>
int main()
{
short a =3;
int b = 0;
printf("%d" , sizeof(b = a+3));//打印4
printf("%d" , b);//仍然为0
return 0;
}
在结果我们可以看到b的值并没有发生变化,sizeof只打印了b变量的数据类型内存长度,并没有计算其中的表达式.
Unsigned 和 signed(无符号和有符号)
它们是修饰作用,只能用于修饰整形和字符型
signed的意思是可以存正数,也可以存负数
Unsigned的意思是只能存正数.
用法:如果你想让自己的变量不需要负数,就用unsigned.
下面举个例子吧:
# include <stdio.h>
int main()
{
unsigned int a = 3;
printf("%u\n" , a);//无符号要用%u打印哦
signed int b = -3;
printf("%d\n" , b);
return 0;
}
那么我们可以看出 int 就等于signed int ,但是 char 不等于 signed char 哦
二.变量
在c语言中,我们把变化的值为成为变量,把不变的值成为常量。
那么我们在创建变量的时候给它一个值,这就是变量的初始化.就像下面的代码
# include <stdio.h>
int main()
{
int a = 3;//初始化
return 0;
}
那么我们就成功的创建了一个变量了,那么我想说创建的本质是什么呢?
创建变量的本质就是:
向计算机的内存申请一块空间,来存储你的值.
就好比上面的代码的内部执行过程是:首先向内存申请一块四个字节的空间然后把数字3放进去存储.
全局变量和局部变量:
变量呢,又分全局变量和局部变量,所为全局变量呢使用范围更广,在整个工程中都可以使用,而局部变量呢,使用有局限性,只能在相对应的{ }中使用,超出了就无法使用.我们用代码来解释一下全局变量和局部变量
# include <stdio.h>
int b =5;//全局变量
int main()
{
{
int a = 3;//局部变量
printf("%d", b);//成功打印全局变量b
}
printf("%d" , a);//无法打印局部变量a
return 0;
}
我们说过数据都存储在内存,那么全局变量和局部变量在内存的那一个部分呢?
我们来看图:

我们看到局部变量是存储在栈区的,而全局变量是存储在静态区的。
另一些重要知识点:
如果不初始化全局变量和局部变量的结果是多少呢
# include <stdio.h>
int b;
int main()
{
int a;
printf("%d",a);//局部变量输出随机值
printf("%d", b);//全局变量输出0;
return 0;
}
局部变量的值会是随机值,全局变量的值是0!!
算术运算符:
C语言的算术运算符也是双目操作符(有两个操作数):有+, -, * ,/,%,让我们这些是怎么使用的
# include <stdio.h>
int main()
{
int a,b,d,c;
float i;
a = 3 + 2;
b = 2 * 2;
d = 7 % 2;//求余
printf("%d,%d,%d\n", a,b,d);
printf("%d\n", 7 / 4);//两个整数相除,结果是整数
printf("%f\n", 7 / 4.0);//如果想得到小数,把任意一个数改为小数.
//取余结果的正负是看第一个操作数的符号
printf("%d\n", 6 % -4);//输出2
printf("%d\n", -6 % 4);//输出-2
}
这里要特别注意:
1.两个整数相除结果是整数
2.%f 默认是小数点后六位
3.取余只能用于整数!,结果的符号是看第一个操作数的符号
赋值操作符(=)
关于赋值重要的知识点:
# include <stdio.h>
int main()
{
//int a = 0;//初始化
//a = 3;//赋值
//连续赋值
int a, b, c;
b = 2;
a = c =b+3 ;
printf("%d\n", a);
b = b + 2;//把b的值加上2,再赋给b
//b += 2;//也可以写成这种
printf("%d\n", b);
//同样也有-=,*=,/=,%=
int a1, a2, a3, a4;
a1 = a2 = a3 = a4 = 3;
a1 -= 1;
a2 *= 3;
a3 /= 3;
a4 %= 2;
printf("%d\n", a1);//2
printf("%d\n", a2);//9
printf("%d\n", a3);//1
printf("%d\n", a4);//1
return 0;
}
这里的重点是int a = 3 ; //这是初始化 a = 5; //这是赋值。和在连续赋值是从右到左来赋值
单目操作符:
只有一个操作数的操作符叫单目操作符:
有++(自增操作符) ,--(自减操作符),+(正号), -(负号)
自增和自减又分为:前置++,后置++,前置--和后置--。因为自减和自增的基本理念是一样的所以我们用自增来举例子.
# include <stdio.h>
int main()
{
int a = 1;
int c, b;
c = a++;
b = ++a;
printf("%d", c);//打印出1,先把a的值给c,在把a的值加1.这个时候a的值已经是2了
printf("%d", b);//打印出3,先把a的值加一,在把a的值赋值给b.
printf("%d\n", a);//等于3,所以不管是前置++还是后置++,最后a的值都会加1。
return 0;
}
通过上述代码我们可以总结:
1.不管是前置还是后置,最后结果都会自增1.
2.a++,a--是先试用a的值,再自增或自减(先用后加)。++a,--a.都是先进行自增和自减,再使用a的值(先加后用).
强制类型转换:
# include <stdio.h>
int main()
{
int a1= (int)3.14;//强制转换为整形
printf("%d", a);//直接舍去小数部分
return 0;
}
当直接写出字面浮点数时,系统会自动识别为double类型,所以我们可以用强制类型转换整形,直接舍弃小数部分.
printf里的占位符的知识点:
# include <stdio.h>
int main()
{
//printf函数限定宽度(最小宽度)
printf("%7d\n", 1234);//不够宽度的话会在前面左边加空格,默认是右对齐.
printf("%-7d\n", 1234);//如果想左对齐的话就改为负号
//printf函数限定小数位数
printf("%.1f\n", 3.323);//保留一位小数。
printf("%5.2f\n", 3.1315);//最小宽度为5,保留两位小数
//printf函数限定字符串长度
printf("%.5s", "nasdsad");
//其他
printf("This %s is %s %d", "apple", "mine",11);
//有几个占位符后面就要有相应的变量。
}
通过上述代码我们总结
1.打印的宽度是最小宽度,不够宽度我打印空格,够宽度就不管,默认是右对齐。
2.在限制小数位数的时候,会四舍五入的,请注意一下
3.限制宽度可以和限定小数位可以一起使用的.
scanf函数:
标准输入函数,也要包含<stdio.h>头文件哦,用法和printf函数相似,我们来看看它的用法吧
# include <stdio.h>
int main()
{
////单个输入
//int a = 0;
//printf("请输入a的值:");
//scanf("%d", &a);//记住a的取地址不能掉
//printf("a的值为:%d", a);
//多个输入
int num;
int age;
int a, b;
printf("请输入你的学号和成绩:");
scanf("%d%d", &num, &age);
printf("你的学号是:%d ,你的年龄是:%d\n", num, age);
//这里注意一下在scanf("")这里输入占位符的时候,最好不要加东西,如果加了,输入变量的时候也要加东西.
//比如
int sum = scanf("%d,%d", &a, &b);//这里加了个,号,你输入的时候也要加,号
printf("%d %d\n", a, b);
printf("%d\n",sum);//打印出scanf的返回值.
return 0;
}
重点:
1.scanf函数的&取地址的符号不能掉的
2.输入占位符的时候不能加东西,如果加了,再输入的时候也要加相同的东西(最好不要加)
3.scanf是有返回值的,它返回的是成功读取的变量的个数.
此文章仅仅是帮助自己更深刻地学习C语言这门知识,如果有错误的话还请大家指点指点,同时也希望帮助到刚开始学习C语言的同学们,谢谢.此外我的Gitee里面有自己学习的思维导图以及平常写的代码啊,如果需要的话,可以自拿
仓库 - 一个学不明白数据结构的大学生 (a-person-who-doesnt-understand) - Gitee.com

4272

被折叠的 条评论
为什么被折叠?



