初识C语言————4

文章目录

  • 常见关键字
  • 1、 关键字 typedef

  • 2、关键字static

  • define 定义常量和宏
  • 指针
  • 结构体

前言

这是博主初识C语言系列的最后一篇,之后博主会更新更详细的关于C语言学习的知识。希望各位老铁多多支持。

一、常见关键字

1、 关键字 typedef

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

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}

简单来说就是给一个复杂类型重新起一个名字,方便使用。

2、关键字static

在C语言中: static是用来修饰变量和函数的:

1>. 修饰局部变量-称为静态局部变量

2>. 修饰全局变量-称为静态全局变量

3>. 修饰函数-称为静态函数

局部 

static 修饰局部变量的时候
本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束
但是作用域不变

对比代码1和代码2的效果理解static修饰局部变量的意义。

可以得出这样的一个结论: static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。 

 全局

static 修饰全局变量
全局变量具有外部链接属性,所以在其他源文件内部依然可以使用(方法要正确)
static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变成了内部链接属性
这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了
感觉像是作用域变小了

函数 

static 修饰函数
static 修饰函数和static修饰全局变量是一样的
函数是具有外部链接属性的,但是被static修饰,就变成了内部链接属性
使得这个函数只能在自己所在的源文件内部使用,不能在其他文件内部使用的

二、define 定义常量和宏

define 定义常量

define 定义宏 

  

三、指针

要了解指针,我们先了解一下内存:

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

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

#include <stdio.h>
int main()
{
 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%pn", &num);//打印地址,%p是以地址的形式打印
 return 0;
}

 那地址如何存储,需要定义指针变量。

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

&num——指针

我们口头语中说的指针,基本上都是指针变量。

指针其实就是地址。

#include
//%p - 专门用来打印地址的,是16进制的形式表示地址的
int main()
{
	int a = 15;//虽然a占有4个字节,但是当我们&a的时候,拿到的是4个字节中第一个字节的地址
	//printf("%pn", &a);

	int * pa = &a;//pa存放a的地址的,是一个变量,叫:指针变量,意思是存放指针的变量
	*pa = 30;//解引用操作符,*pa 就是a
	
	printf("%dn", a);
	return 0;
}

我们来测试一下指针变量的大小: 

博主用的是32位平台所以打印出来的是4。 

四、结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里我们只能使用结构体来描述了。

例如:

struct Stu//结构体类型
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
};

 以下是第二种打印方法:

struct S
{
	char name[20];
	int age;
	float score;
};

void print1(struct S t)
{
	printf("%s %d %fn", t.name, t.age, t.score);
}

void print2(struct S* ps)
{
	printf("%s %d %fn", (*ps).name, (*ps).age, (*ps).score);
	printf("%s %d %fn", ps->name, ps->age, ps->score);
}

//结构体变量.成员
//结构指针->成员

int main()
{
	struct S s = { "zhangsan", 20, 85.5f };
	print1(s);
	print2(&s);

	return 0;
}

各位老铁,博主的初识C系列到此结束。后续博主会更新更为详细的C语言学习知识。如果博主的文章对你有帮助,请点点关注,点点赞,支持一下博主。感谢你们的关注和赞。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>