(学习记录)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

相关文章

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr