(学习记录)C 0004——简单的了解C语言

2024-04-13 10:08

本文主要是介绍(学习记录)C 0004——简单的了解C语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从0开始的的C语言

  • 简单的了解指针
    • 内存
    • 指针变量
    • * 解引用操作符
    • 指针变量所占的空间
  • 简单的了解结构体

简单的了解指针

学习指针前,我们必须先要了解内存


内存

内存是电脑上特别重要的存储器,计算机中所有程序运行都是在内存中进行的。

为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元大大小是1个字节

为了有效的访问到内存的每个单元就给内存单元进行了编号,这些编号称为该内存单元的地址

如图:
内存条

变量都有地址,取出变量的地址如下:

int main()
{int a = 10;//向内存申请4个字节的空间,里边存放10//%p 按照地址的方式来打印printf("%p\n", &a);//&——取地址操作符return 0;
}

F10调试,调出内存窗口输入&a,如图:
在这里插入图片描述
在0x0040F874中,因为0a的十六进制表示为10,所以0x0040F874存储的是0a。

0x0040F874所占的4个字节的空间,就是变量a所占的空间。

因为地址是连续的,0a的地址是74 ,所以0a后面的00的地址就是75,再往后就是76和77。

打印得到的地址是四个字节地址中,编号最小的地址。

每次调试,系统分配的地址都会有所不同。

地址就是指针,指针就是地址。


指针变量

将&a的地址存放到pa中,pa是一个存放地址变量,这样的变量被称为指针变量

指针变量的写法是int* pa = &a;pa 存放的变量a的地址,也就是说pa指向了变量a,因为变量a定义的是int, 所以pa的类型也是int。

如图:

int main()
{int a = 10;int* pa = &a;char ch = 'w';char* pc = &ch;return 0;
}

* 解引用操作符

int main()
{int a = 10;int* pa = &a;*pa = 20;printf("%d\n", a);return 0;
}

*pa的意思是,通过pa存的呢个地址,去找到它所指向的那块空间a。

如果*pa = 20;呢么a的值是否改变呢?

运行后
运行结果
如图,所以*pa所代表的意思就是变量a。


指针变量所占的空间

int main()
{printf("%zu\n", sizeof(char*));printf("%zu\n", sizeof(short*));printf("%zu\n", sizeof(int*));printf("%zu\n", sizeof(long*));printf("%zu\n", sizeof(float*));printf("%zu\n", sizeof(double*));return 0;
}

运行结果是:
运行结果
如图,每种类型都是4个字节空间。

原因是在32位机器上,有32根地址线,每个地址线由二进制数组成,所以有32个0/1组成,也就是32个bit位,32个bit位 等于 4 字节。

因此,64位就有8个字节空间大小。


简单的了解结构体

当描述一个复杂对象时,不能用一个简单的变量描述。
所以C语言提供了一个方式,用来描述这些复杂对象,这个方式就是结构体

比如,描述一个学生,用到的信息有名字,年龄,性别,学号等。描述一本书,书名、价格、作者。

//声明学生类型
struct Student
{char name[20];int age;char sex[5];char id[12];
};
struct Book
{char name[20];int price;char author[20];
};
int main()
{//创建的结构体变量struct Student s1 = {"张三",20,"男","20200506"};struct Student s2 = {"lisi",30,"女","20200908"};struct Book b1 = {"C语言程序设计",55,"谭浩强"};//打印
//.操作符 用法是:结构体变量.成员名printf("名字:%s\n年龄:%d\n性别:%s\n学号:%s\n", s1.name,s1.age,s1.sex,s1.id);printf("%s %d %s\n", b1.name, b1.price, b1.author);//指针struct Book* pb = &b1;printf("%s %d %s\n", (*pb).name, (*pb).price, (*pb).author);
//-> 用法是:结构体指针->成员名printf("%s %d %s\n", pb->name, pb->price, pb->author);return 0;
}

运行结果为:
运行结果


这篇关于(学习记录)C 0004——简单的了解C语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/899842

相关文章

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路