初识C语言————4

news2024/11/20 9:46:44

文章目录

  • 常见关键字
  • 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 就是a
	
	printf("%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://www.coloradmin.cn/o/444451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海康威视发布2022年ESG报告:科技为善, 助力可持续的美好未来

近日&#xff0c;海康威视正式发布《2022环境、社会及管治报告》&#xff08;以下简称“海康威视ESG报告”)&#xff0c;连续5年呈现在环境、社会发展、企业治理等领域的思考和创新成果。此外&#xff0c;报告中首次披露了碳中和业务蓝图&#xff0c;积极布局绿色生产、绿色运营…

HTTP特性

1 HTTP/1.1 的优点有哪些&#xff1f; 2 HTTP/1.1 的缺点有哪些&#xff1f; 3 HTTP/1.1 的性能如何&#xff1f; HTTP 协议是基于 TCP/IP&#xff0c;并且使用了「请求 - 应答」的通信模式&#xff0c;所以性能的关键就在这两点里。 3.1 长连接 早期 HTTP/1.0 性能上的一…

分布式Id生成之雪花算法(SnowFlake)

目录 前言 回顾二进制 二进制概念 运算法则 位&#xff08;Bit&#xff09; 字节&#xff08;Byte&#xff09; 字符 字符集 二进制原码、反码、补码 有符号数和无符号数 疑问&#xff1a;为什么不是-127 &#xff5e; 127 &#xff1f; 为什么需要分布式全局唯一ID…

sql中 join 的简单用法总结(带例子)

join 常见的用法有&#xff1a; 目录 left join&#xff08;left outer join&#xff09;right join&#xff08;right outer join&#xff09;join&#xff08;inner join&#xff09;full join&#xff08;full outer join 、outer join&#xff09;cross join 说明&#xf…

docker自定义镜像

文章目录 一、自定义镜像1.1 镜像结构1.2 Dockerfile1.3 dockerCompose1.3.1 dockerCompose的作用1.3.2 dockerCompose的常用命令 1.4 镜像仓库 一、自定义镜像 1.1 镜像结构 自定义镜像通常包含三个基本部分&#xff1a;基础镜像、应用程序代码和配置文件。 基础镜像&#…

asp.net+sqlserver+C#网上洗衣店的设计与实现

选题的目的、理论与实践意义&#xff1a; 随着洗衣店服务的日渐完善和复杂&#xff0c;以前单纯的文本记录人工管理方式不仅效率低下&#xff0c;且易出错&#xff0c;直接导致管理费用的增加&#xff0c;服务质量的下降。由于这种人工管理方式不能完全适应需求的发展&#xff…

打包后dist包中app.**.js文件暴露大量接口信息,webpack-obfuscator对打包后的js代码混淆加密

问题描述 打包后dist包中app.**.js文件暴露大量接口信息&#xff0c;而webpack-obfuscator可以对打包后的js代码混淆加密 版本信息 webpack: 4.x.x node: 14.18.0 webpack4环境下使用webpack-obfuscator不能使用最新版本 我的下载版本是&#xff1a; npm install --save-de…

回溯算法模板(python)

#回溯模板&#xff0c;伪代码 def backtracking(参数):if (终止条件):存放结果return #如果要将数层中间的结果也插入&#xff0c;就不用写return&#xff0c;比如子集问题for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;):处…

通过Python的PIL库进行图像的过滤

文章目录 前言一、素材准备二、演示1.引入库2.定义图片路径3.打开原图4.过滤方法4.1图像的模糊效果代码效果图 4.2图像的轮廓效果代码效果图 4.3图像的细节效果代码效果图 4.4图像的边界效果代码效果图 4.5图像的边界加强效果代码效果图 4.6图像的阈值边界加强效果代码效果图 4…

自定义bean对象实现hadoop序列化

文章目录 一、源代码1.UserSaleMapper类2. UserSaleReducer类3. UserSaleDriver类4.pom.xml 二、执行结果 指导参考图&#xff1a; 一、源代码 1.UserSaleMapper类 package org.example.writable;import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Tex…

大厂对ChatGPT的开发利用和评估案例收录

ChatGPT已经进入各行各业&#xff0c;但是实际在工作中的有哪些应用呢&#xff1f;这里分享互联网一线大厂分享的一些实际使用案例&#xff0c;所有文章收录到 大厂对ChatGPT的开发利用和评估案例收录http://​www.webhub123.com/#/home/detail?projectHashid67792343&own…

Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

前言 本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程&#xff0c;由于没有先从小处学习&#xff0c;而是直接找相关资料就开始做&#xff0c;免不了很多奇怪的问题花了一些时间&#xff0c;基于此情况&#xff0c;我将尽可能整理出更多细节&#xff0c;尤其…

Linux基础内容(20)—— 共享内存

Linux基础内容&#xff08;19&#xff09;—— 进程间通信(介绍与管道内容)_哈里沃克的博客-CSDN博客 目录 1.共享内存的原理 2.共享内存的概念和特点 创建共享内存 共享内存的形式 共享内存(ipc资源)的调用和特征 用户接口删除共享内存 共享内存关联 去关联 特点 …

React基础学习(一)

一、虚拟DOM和真实DOM <script type"text/babel"> // 此处一定要写babel!!!!!!!// 1. 创建虚拟DOM// const VDOM <h1 id"title">Hello, React!</h1> // 此处一定不要写引号 因为这不是字符串!!!!!!!const VDOM ( // 如果有多层嵌套&a…

PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001

首先去下载postgresql https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 下载地址: 去上面的地址下载,最好下载10版本的,我这里下载的是15版本的,有问题,后面说吧 下载以后 然后双击安装 next 选择目录next next 输入密码next

好程序员:Java线下培训有必要吗?零基础想学Java怎么学?

有粉丝问好程序员&#xff1a;自己只有周末有时间&#xff0c;想报班学习Java编程&#xff0c;是线上学编程好还是线下学编程好&#xff1f;小源从实际客观以及学习效果的角度来讲&#xff0c;毫无疑问是线下学编程的效果会更好。为什么这样说呢&#xff1f; 比如&#xff1a;家…

初探强化学习

1.引言 人生中充满选择&#xff0c;每次选择就是一次决策&#xff0c;我们正是从一次次决策中&#xff0c;把自己带领到人生的下一段旅程中。在回忆往事的时候&#xff0c;我们会对生命中某些时刻的决策印象深刻&#xff1a;“还好当时选择了读研&#xff0c;毕业后找到了一份自…

学习小程序基础内容之逻辑交互

我们先来看一下实现的效果。 然后再来分享结构。 结构分为左右3:7 分配&#xff0c; 左侧是类别&#xff0c;右侧是该类别对应的品牌。 后台会在onload的请求把左侧的类别返回来&#xff0c;然后我们通过循环把数据展示出来。然后通过点击事件&#xff0c;把对应的品牌请求回来…

2023年,初级测试到高级测试开发工程师需要什么技能?卷起来......

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

泵站水闸自动化系统调试方案

1、调试方案概述 调试方案分为自控系统现场调试、视频系统现场调试以及控制中心远程调试&#xff08;包含通讯测试、自控调试和视频调试&#xff09;。 自控系统现场调试分为触摸屏调试和本地上位机调试两部分。触摸屏系统的调试步骤如下&#xff1a; 确认触摸屏和PLC的通讯情…