初识C语言(4)

简介: 初识C语言(4)

关键字

C语言预留给自己的一些特殊符号,有特殊的意义。这些符号被称为关键字。关键字很多,我们介绍一些常见的关键字,并且给它们分类。特别强调,程序员不能自己创造关键字!

分类:


接下里我们简单介绍两个关键字typedef和static

typedef

typedef顾名思义是类型定义,这里可以理解为类型重命名。

#include<stdio.h>
typedef unsigned int uint;
int main()
{
  unsigned int num1 = 0;
  //此时你觉得unsigned int这个类型太长了
  //你想简化所以可以使用typedef重定义
  uint num2 = 0;
  //此刻num1和num2相同
  return 0;
}

static

在C语言中:static是用来修饰变量和函数的,静态的。这里,讲解三种用法。

1.static修饰局部变量

2.static修饰全局变量

3.static修饰函数

static修饰局部变量

那能延长i的生命周期吗,如果我们不希望i每次都被重新创建,i的值初始值一直是1的话?

当然可以利用static!

解释如下:

//这时的局部变量就是静态的局部变量
//一个普通的局部变量进入函数创建,出函数销毁
//但是static修饰之后,进入函数时已经创建好了,出函数的时候也不销毁。
//主观的感受:生命周期变长了,但是作用域不变,只能在局部范围内使用。
// 
//本质:普通的局部变量是放在栈区上,
//但是被static修饰之后,是存放在内存的静态区,
//静态区的变量生命周期和全局变量生命周期一样长。

本质:

static修饰全局变量

全局变量可以跨文件使用,用extern。那加上static呢?

解释如下:

//int c = 2023;
//全局变量是具有外部链接属性
//这种属性决定了全局变量在多个文件之间可以互相使用
//static int c = 2023;
//static修饰全局变量的时候,将外部链接属性变成了内部链接属性
//c只能在当前的.c文件内部使用,不能在其他的.c文件使用了,
//即便其他文件使用了extern外部声明也不行
//给我们主观感受:改变了作用域
//本质:无论加于不加static,全局变量均存在于静态区,
//编译器在语法层面增加了限制

static修饰函数

加上static后和修饰全局变量有异曲同工之处。

解释如下:

//static修饰函数
//函数也是具有外部链接属性的
//这种属性决定了函数是可以跨文件使用的
//
//int Add(int x, int y)
//{
//  return x + y;
//}
//static修饰函数是把函数的外部链接属性改成了内部链接
//使得函数只能在自己所在的.c文件里使用
//即便有extern也不行
static int Add(int x, int y)
{
  return x + y;
}

#define定义常量和宏

在前面我们学习了#define定义常量:

接下来我们将认识到#define定义的宏

#define定义的宏可以有参数和替换。

指针

关于指针,在初识C语言中,我们只需要知晓指针是什么?在介绍指针前,我们需要一些关于内存的预备知识,

内存

我们先看下电脑大致构成:

内存的管理 \划分

我们需要将硬盘的数据放入内存,又将内存的数据放入cpu,取出或者进行计算等等。那我们怎样去管理内存这块空间呢?这里我们类比我们需要在一栋大楼某个房间找到某个人,那我们怎样快速去找到这个人呢?找门牌号即可,也就是地址。

同理,我们对内存里的空间进行分割,编号。


内存空间为了有效的进行管理


1.把内存划分为一个个有效的内存单元(一个字节)


2.给每个内存单元编号形成→地址


C语言中把地址也叫指针


!内存单元编号=地址=指针


这样,未来,只要指定了一个地址,通过地址就能找到对应的内存单元。


关于计算机单位:比特位bite——二进制0/1       字节byte——字节   KB   MB   GB   TB    PB


最适合一个有效内春单元的是字节。


内存的访问

访问内存首先我们得有地址,有了地址才能访问内存单元,地址从哪里来呢?——地址线

所有地址:


一个地址管理一个字节。

那2^32总共能管理多大的内存空间?——2^32字节

那是多大呢? 换算得到4GB

综上所述:我们可以知道内存中物理的地址线产生地址信号,然后产生传出地址序列之后,可以利用序列在内存中找到一个对应空间。


举例

我们在编译器内存 窗口看到的是十六进制表示方法,为了看起来更直观清晰。

但是内存中存储中仍是二进制。

&a是取首地址,后面都是连续。

&a拿到较小字节的地址



指针符号

&——取地址操作符。

int* pa=&a;

*——pa是指针变量。

int——pa指向的是int类型的变量。

*pa

*——解应用操作符——通过地址找到地址所指向的对象。


指针大小

在32位的环境下:

在64位的环境下:


指针变量是用来存放地址的


指针变量的大小,就取决于存放一个地址需要多大的空间


在32位的环境下:


一个地址大小是32bit位,需要4个字节。所以不管什么类型的指针变量,大小都是4个字节。


在64位的环境下:


一个地址大小是64bit位,需要8个字节。所以不管什么类型的指针变量,大小都是8个字节。


综上:指针大小在32位平台是4个字节,64位平台是8个字节。  

补充和总结

补充

1.编号=地址=指针

2.指针变量:存放地址的变量

//无论你放入什么到指针变量当中去,它都会当作一个变量

#include<stdio.h>
int main()
{
int* pa=5;
//放入一个5,指针pa也会把5当作地址
return 0;
}

3.口头语中说的指针:一般指的是指针变量。

总结

1.内存会被划分以字节为单位的一个个的内存单元

2.每个内存单元都有编号,编号 = 地址 = 指针


3.C语言中创建的变量,其实是向内存中申请一块空间,比如:int a =10,就是向内存申请4个字节,每个字节空间都有地址。


4.&a的时候,拿出的是4个字节中的地址较小的字节地址(编号)


5.这个地址要存储起来,给一个变量,这个变量是用来存放地址(指针),所以叫指针变量:int *pa =&a;


6.pa中存放的是a的地址,要通过pa中的地址找到a,怎么写?*pa


通过pa中的地址找到a *pa = 20;//本质是修改a


7.指针符号


8.指针大小在32位平台是4个字节,64位平台是8个字节。


结构体

创建结构体

struct Stu
{
char name[20];
int age;
float score;
};//不要漏掉分号

结构体的初始化

int main()
{
   int num;
  struct Stu s1 = { "学生1",20,88.0f };
  struct Stu s2 = { "学生2",18,65.5f };//初始化
  printf("%s %d %f\n", s1.name, s1.age, s1.score);
  return 0;
}

访问结构体

//访问结构体两种方法
  //第一种:.为结构成员访问操作符
  printf("%s %d %f\n", s1.name, s1.age, s1.score);
  //第二种:->操作符
  struct Stu* ps1 = &s1;
  printf("%s %d %f\n", ps1->name, ps1->age, ps1->score);

访问结构体有两者方式:

1.  .为结构成员访问操作符

2.->操作符


最后,感谢大家的阅读,欢迎大家指正不足和错误!下一篇我们将进入初级C语言!

关于一些代码和思维导图博主放在我的gitee帐号了,欢迎大家去关注。谢谢!

【gitee:https://gitee.com/TSQXG/c.start

【邮箱:2784139418@qq.com】

目录
相关文章
|
2月前
|
C语言
C语言练习5
C语言练习5。
17 2
|
2月前
|
自然语言处理 算法 Linux
C语言:深入探索与实际应用
C语言,作为计算机科学基石,以其通用性、过程式编程和底层访问能力在系统编程、嵌入式开发等领域广泛应用。其支持结构化编程、变量作用域和递归,提供高效代码编写方式。数据类型(如整型、浮点型、字符型)、控制结构(如if-else、循环)、函数和指针是C语言的关键特性。指针允许直接操作内存,增强了灵活性。C语言在操作系统(如Linux内核)、嵌入式系统、游戏开发及数据结构与算法实现中扮演重要角色,是理解和学习其他编程语言的基础。通过深入学习C语言,开发者可以提升技能,适应各种编程挑战。
|
2月前
|
Java 程序员 编译器
什么是C语言
什么是C语言
28 0
|
11月前
|
Java C语言 C++
初识C语言(上)
初识C语言(上)
52 0
|
7月前
|
存储 C语言
初识C语言(2)
初识C语言(2)
47 0
|
9月前
|
存储 Go C语言
|
11月前
|
存储 C语言
初识C语言(下)
初识C语言(下)
58 0
|
11月前
|
存储 编译器 C语言
初识c语言(二)
初识c语言(二)
97 0
|
11月前
|
C语言
C语言假期作业 DAY 13
C语言假期作业 DAY 13
|
12月前
|
编译器 C语言
C语言假期作业 DAY 03
C语言假期作业 DAY 03