0
点赞
收藏
分享

微信扫一扫

初学C语言的福音-关键字和指针

萧萧雨潇潇 2022-04-13 阅读 24

一。关键字

1. typedef

typedef unsigned int uint;
struct Node
{
int date;
struct Node* next;
}Node;
//类型重命名
int main()
{
  unsigned int a=10;
  uint a=10;
  struct Node* Phead;
  Node* Phead;
{

2.static

  • static,顾名思义:静态
  • 修饰的变量称为静态变量

2-1 修饰局部变量

void show()
{
	static int i = 1;//只初始化一次
	i++;
	printf("%d ", i);
}

int main()
{
	int i = 0;
	while (i < 10)
	{
		show();
		i++;
	}
}

反汇编看statia修饰的局部变量:
在这里插入图片描述

  • static修饰的局部变量出了作用域不消毁,实际了局部变量的存储位置.
  • 影响了变量的生命周期,生命周期延长至程序的生命周期

2-3修饰全局变量

  • 多文件(多个源文件和一个头文件)的使用
  • extern:多文件使用全局变量或函数的声明,告知编译器其他文件已定义该 变量,但此处为声明,不能初始化

在这里插入图片描述

  • 改变全局变量的作用域,仅限定在本文件内使用
  • 防止多文件的变量与其重名引发的问题
  • 防止被随意更改,安全性提高

2-3修饰函数

3.register

  • 尽量定义到寄存器中,优点:快
  • 常被定义到被经常被打印的局部变量中,优点:利用率高且占时少
  • 可能被定义到寄存器中,因此不可对变量取地址,原因:寄存器中变量无地址

4.define

4-1定义标识符常量

#define NUM 2022
int main()
{
	printf("%d\n", NUM);
	int n = NUM;
	int arr[NUM] = { 0 };
	return 0;
}

4-2定义宏

#define ADD(x,y) x+y
int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a, b);
	printf("%d\n", c);
}

在这里插入图片描述
在这里插入图片描述

二.指针

1-1内存

  • 内存会划分为一个个内存单元(一个内存单元是一个字节:1byte)
  • 每个内存单元都有一个编号

在这里插入图片描述

int a=10;
//向内存申请4个字节的空间,

在这里插入图片描述

int a=10;
int* p=&a;
p拿到的是存放变量a的四个字节的内存的首字节的地址

在这里插入图片描述

1-2指针的大小

int main()
{
    printf("%d\n", sizeof(char*));
    printf("%d\n", sizeof(short*));
    printf("%d\n", sizeof(int*));
    printf("%d\n", sizeof(float*));
    printf("%d\n", sizeof(double*));

    return 0;
}
  • 不管什么类型的指针,都是在创建变量
  • 指针变量是用来存放地址的
  • 指针变量的大小却决于一个地址存放的时候需要多大的空间
  • 32位的机器:32bit位—>4byte , 所以指针变量的大小是4个字节
  • 64位的机器:64bit位—>8byte , 所以指针变量的大小是8个字节
举报

相关推荐

0 条评论