C语言数据类型和变量

一.数据类型

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值