C语言_常量_变量_变量本质_变量的存储类别_auto_static_register_extern

接上一篇:C语言_数据类型[详细分析]

  今天来向大家分享C语言中的常量和变量以及变量的存储类别,都是博主的一些笔记,有不懂的可以评论区讨论噢,话不多说,上菜:

此博主在CSDN发布的文章目录:我的CSDN目录,作为博主在CSDN上发布的文章类型导读

1.常量

  常量:常量就是在程序运行过程中不可被改变的量。

1.1.数值型常量

  数值型常量包括整型常量和实型常量。

1.2.字符型常量

1.2.1.字符常量

  用单直撇括起来。
  例如:’a’

1.2.2.字符串常量

  用一组双引号括起来。
  例如:“aa”

1.2.3.转义字符

\' 单引号    
\" 双引号   
\\ 反斜杠    
\0 空字符   
\a 响铃   
\b 后退   
\f 走纸   
\n 换行   
\r 回车      
\t 水平制表符   
\v 垂直制表符     
\xnnn 表示十六进制数(nnn)

1.3.符号常量

  用#define定义符号常量
  符号常量:#define 标识符 常量

2.变量

2.1.整型变量

  基本型:int 4个字节
  short(短型) 2个字节
  long(长型) 4个字节 赋值时加L;

2.2.实型变量

1、单精度
  float 四个字节 有效数字6位 赋值时需要加f;
2、双精度
  double 8个字节 有效数字15
3、长双精度
  long double 8/16个字节 有效数字15/19

2.3.字符型变量

  用char定义
  char(字符型) 1个字节

#if 1
#include<stdio.h>
int main()
{
	char c='a';
	//char a="assa";错误定义
	printf("%c\n",c);
	//printf("%s\n",a);
}
#endif

2.4.变量剖析

  变量概念:
  概念:既能读又能写的内存对象,称为变量;若一旦初始化后不能修改的对象则称为常量。
  变量定义形式: 类型 标识符, 标识符, … , 标识符 ;
  例如:
    int x ;
    int wordCut , Radius , Height ;
    double FlightTime , Mileage , Speed ;

2.5.变量本质

  (1)程序通过变量来申请和命名内存空间 int a = 0

  (2)通过变量名访问内存空间
    (一段连续)内存空间的别名(是一个门牌号)
  
  (3)修改变量有几种方法?
    1、直接
    2、间接。内存有地址编号,拿到地址编号也可以修改内存;于是指针横空出世了。(编程案例)
    3、内存空间可以再取给别名吗?
  可以
  (4)数据类型和变量的关系
    通过数据类型定义变量
  (5)总结
    1、对内存,可读可写;
    2、通过变量往内存读写数据;
    3、不是向变量读写数据,而是向变量所代表的内存空间中写数据。

2.6.例1

int  main()
{
	//
	//2种方法,通过变量直接操作内存
	//	通过内存编号操作内存

	int i = 0;

	printf("&i:%d\n", &i);

	*((int *)(1245024)) = 10;
	printf("i:%d", i);
	printf("hello....\n");
	getchar();
	return 0;
}

2.7.例2

//指针指向谁,就把谁的地址赋给指针

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void main44()
{
	int a ;
	int b; 
	char *    p ;
	//p = 0xaa11
	a = 10; //1 直接赋值  //cpu里面执行

	printf("&a: %d\n", &a);

	//2间接赋值 ==直接通过内存
	 *((int*)1245024) = 200;

	 printf("a: %d\n", a);

	 {
		p = 1245024;  // 间接赋值 通过指针

		*p = 300;
	 }

	 //3 对内存空间能不能在取 别名.....  C++ 引用 抛砖.....
	//1245024
	
	printf("hello...\n");
	system("pause");
	return ;
}

3.变量的存储类别

3.1.动态存储和静态存储

  静态存储就是指程序运行分配的固定的存储方式,而动态存储则是在程序运行期间根据需要动态地分配内存空间。

  动态存储在堆区,一般用malloc分配内存

3.2.auto变量、static变量、register变量、extern变量

  auto:函数中的局部变量,动态的分配存储空间,数据存储在动态存储区中,在调用该函数时,系统会给他们分配存储空间,在函数调用结束后自动释放这些空间,即修饰一个局部变量为自动的,auto可以省略,因为局部变量的存储方式默认为自动的。

  static:静态局部变量,属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放,即始终保持变量运算后的值。

  register:为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量,只有局部自动变量和形参可以作为寄存器变量。

  extern:外部变量(即全局变量)是指函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件末尾结束。如果外部变量不是在文件的开头定义,其有效的作用范围只限于定义出到文件终了。

3.2.1.auto的运用


#if 1
#include <stdio.h>
void AddOne()
{
	//auto int i=1.1;“auto”不能与任何其他类型说明符组合
	auto b=0;
	b=b+1;
	printf("%d\n",b);}
int main()
{
	printf("auto第一次调用:");
	AddOne();
	printf("auto第二次调用:");
	AddOne();//结论,auto可以省略,局部变量的存储方式默认为自动的。
	return 0;
}
#endif

3.2.2.static运用


#if 1
#include <stdio.h>
void AddOne()
{
	static int b=0;
	b=b+1;
	printf("%d\n",b);
}
int main ()
{
	printf("static第一次调用:");
	AddOne();
	printf("static第二次调用:");
	AddOne();//结论:static会存储上一次使用后的值
	return 0;}
#endif

3.2.3.register运用


#if 1
#include <stdio.h>
void ss(int a)
{
	printf("%d\n",a);
}
int main ()
{
	register int i=100;
	ss(i);
	printf("%d\n",i);
	return 0;
}
#endif

3.2.4.extern的运用


/*//x1文件中///*/
#if 1
#include <stdio.h>
int main()
{
	extern int iExtern;
	printf("%d",iExtern);
}
#endif
/*//x2文件中///*/
#include <stdio.h>
int iExtern=100;

//使用static计算3的立方
#if 1
#include <stdio.h>
int adda(int x)
{
	static int b=0;
	b=b+x;
	return b;}
int main11()
{
	int a=3,b;
	b=adda(a);
	b=adda(a);
	b=adda(a);
	printf("%d\n",b);
/*int a=3,b,i;for(i=0;i<3;i++){b=adda(a);}printf("%d\n",b);*/}
#endif

3.3.计算机中数据的存储转换

  位bit:存放一位二进制数,即0或1,是最小的额存储单位。
  字节byte:8个为二进制位为一个字节,单位B。

  KB、MB、GB……等等,这些就是基本的数据存储单位了。
  换算:1B=8b;1KB=1024B;1MB=1024KB……

  以上就是本次的分享了,希望对大家有所帮助,欢迎关注博主一起学习更多的新知识!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

futureCode.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值