C语言——初识关键字、static、#define定义、指针

🐒博客名:苏sir很奈斯

📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情。

 

目录

 1.typedef关键字

2.关键字static

2.1修饰局部变量

2.2修饰全局变量

3.#define的定义常量和宏

4.初识指针

4.1取出变量地址

4.2定义指针变量

 4.3指针变量的大小


 

 声明:小编刚学c语言不久,基本初始c语言的基本语法,这里只分享小编对c语言语法的简单理解,后续会小编会更新的c语言的详解。

 1.typedef关键字

理解:typedef 顾名思义是类型定义,这里应该理解为类型重命名。

#include<stdio.h>
typedef unsigned int u_int;
int main()
{
    unsigned int num1 = 0;
    u_int num2 = 0;
    return 0;
}

注:

(1)这里是因为unsigned int的数据类型过长,那么我们就可以运用typedef来重命名数据类型

(2)即unsigned int =u_int,u_int num2=0和unsigned int num2是完全一样的。 

2.关键字static

C 语言中:
static 是用来修饰变量和函数的
1. 修饰局部变量 - 称为静态局部变量
2. 修饰全局变量 - 称为静态全局变量
3. 修饰函数 - 称为静态函数

2.1修饰局部变量

1)我们先来看看没有static修饰的局部变量代码
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}

注:普通的局部变量是放在栈去上的,这种局部变量进入作用域创建,出了作用域就会被释放掉。

 2)当局部变量被static修饰后的代码

 

#include <stdio.h>
void test()
{

	static int i = 0;
	i++;
	printf("%d ", i);
}
int main()
{
	
		int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}
	return 0;
}

:但是局部变量被static修饰后,这种局部变量就会被放在静态区,放在静态区的变量,创建好后,直到程序结束才会被释放掉。

本质上:static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。被static修饰是不影响作用域的,但是生命周期发生了变化,变长了!

2.2修饰全局变量

 1)先来看看不用static修饰的全局变量

 

注:不用static修饰的全局变量代码是可以运行 

 2)当用static修饰的全局变量

 注:

1.全局变量本身是具有外部链接属性的,在A文件定义的全局变量,在B文件中可以通过【链接】使用

2.但是如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性,这个全局变量只能在自己的源文件内部去使用了

3.static的修饰,会把外部链接属性变成内部链接属性,最终使得全局变量的作用域变小

3)static修饰函数

注: 用static修饰函数和用static修饰全局变量是一个道理

 

 

 4)用图理解

3.#define的定义常量和宏

//define定义标识符常量
#define MAX 1000

//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
    int sum = ADD(2, 3);
    printf("sum = %d\n", sum);
    
    sum = 10*ADD(2, 3);
    printf("sum = %d\n", sum);
    
    return 0;
}

4.初识指针

4.1取出变量地址

注:指针本质是地址--又是内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1 个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地

  那么变量是是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

取出变量地址如下       

#include <stdio.h>
int main()
{
 int num = 10;
 &num;
 
 printf("%p\n", &num);
 return 0;
}

注:

1.&num是取出num的地址

2.这里的num是4个字节,每个字节都有地址,取出的是他的首地址

3.打印地址,%p是以地址的形式打印的

 

4.2定义指针变量

那么地址是如何进行存储的呢?需要定义指针变量

#include <stdio.h>
int main()
{
 int num = 10;
 int *p = &num;
 *p = 20;
printf("%d\n",num);
    return 0;
}

 

 

 注:

1.这里的*指的是定义了一个p的指针,而int*是表示定义了一个int类型的p指针

2.而*p是为了解引用操作,用来打印出整型数字,而不是打印出一个地址

 4.3指针变量的大小

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
    printf("%d\n", sizeof(char *));
    printf("%d\n", sizeof(short *));
    printf("%d\n", sizeof(int *));
    printf("%d\n", sizeof(double *));
    return 0;
}

注:其实就是利用sizeof来计算指针类型的大小

好了,小编的分享到此就结束了,如果各位大佬看见小编的不对的地方,一定要指出来让星小编修改 。

  • 18
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

平凡的小苏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值