当前位置:首页 » 《随便一记》 » 正文

初识C语言————4

3 人参与  2023年04月27日 18:31  分类 : 《随便一记》  评论

点击全文阅读


文章目录

常见关键字

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("%p\n", &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("%p\n", &a);int * pa = &a;//pa存放a的地址的,是一个变量,叫:指针变量,意思是存放指针的变量*pa = 30;//解引用操作符,*pa 就是aprintf("%d\n", 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 %f\n", t.name, t.age, t.score);}void print2(struct S* ps){printf("%s %d %f\n", (*ps).name, (*ps).age, (*ps).score);printf("%s %d %f\n", ps->name, ps->age, ps->score);}//结构体变量.成员//结构指针->成员int main(){struct S s = { "zhangsan", 20, 85.5f };print1(s);print2(&s);return 0;}

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


点击全文阅读


本文链接:http://zhangshiyu.com/post/60083.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1