C语言入门教程之三天入门C语言(第二天结构体与指针使用)

2023-11-05

一、C语言中的几种集合的表达形式

			在数学中一般一组数据的集合可以用行列式或矩阵来表示,但在实际编程中
	不能够写出矩阵或行列式,那在 C语言中有什么方法来近似的表示这样一类
	数据的集合呢?
			在本章将具体讲解数据的集合,以及一组不同变量类型的数据存储方式

数组类型

			首先我们引入数组的概念数组从名称上便不难理解数组就是一类数据组合在一起,
	“一类”在编程中就是指的同一种数据类型的变量先来看一下这种数据类型具体实际的定义是如何定义的
#include <stdio.h>
//int:指定数组内的的数据类型,a:数组变量名称,[50]数组的大小这里指的是存放5个int类型的变量

int a[5];
void main() {
    for(int i = 0; i < 5; i++)//采用循环对数组进行遍历
    {
        printf("初始化前a[%d] = %d  ",i,a[i]);
        a[i] = 0;
        printf("初始化后a[%d] = %d\r\n",i,a[i]);
    }
    a[3] = 15;//数组的赋值将数组中的第四个数赋值为15
    for (int i = 0; i < 5; i++)
    {
        printf("a[%d] = %d  ",i,a[i]);
    }
}

整体代码:
整体代码
运行结果:

由此可以看出对数组的访问一般采用遍历整个数组的
方式进行(使用循环语句对数组内部的数据访问)并且
数组在使用时可以不用初始化(本人使用的为C99标准的C),
同样数组也可以对其进行单独的操作例如:a[3] = 15;
这条语句可以对指定的数组内位置的数据进行改动。

数组扩展

	此文的示例为一维数组(一行一列行列式),但在使用中
往往需要更高维度的表示数据如:二维图片中的显示需要使用二
维数据来表示它的每个像素点具体情况。二维数组定义:a[5][5]
如同一维数组一样使用但是在定义赋值时一维数组可以使用
int a[5] = {1,2,3,4,5};语句进行赋值但二维数组需要使用
int a[2][3] = {{1,2,3},{4,5,6}};语句进行赋值

结构体的表示

上面介绍了在相同的类型数据中集合表示方法,但在日常生活中,我们有很多情况是
需要很多不同类型的数据来记录某一件事物的。如:
当记录一名学生的数据需要使用:字符类型记录名字,整型记录他的成绩,浮点型记
录他的年平均成绩等,此时我们便不能够使用简单的数组表示,此时引入结构体与联
合体的概念
#include <stdio.h>
void main()
{
 struct student
 {
  int num;
  char name[30];
  float score;
 }
 stu[3] = { { 1,"LiBai",88 },{ 2,"DuFu",72 }, {3,"LiQingZhao",66 }};
 //结构体数组的各个元素在内存中连续存放
 printf("num:%d    name:%s    score:%f\n", stu[0].num, stu[0].name, stu[0].score);
 //stu[0].num 表示数组stu[0]中的成员num
 printf("num:%d    name:%s     score:%f\n", stu[1].num, stu[1].name, stu[1].score);
}

运行结果

共用体与结构体的定义形式相似。但它们的含义不同:
①结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元;
②共用体变量所占的内存长度等于最长的成员的长度。

联合体的表示

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。
union 共用体名
{
成员列表
}
变量列表

共用体的应用举例

name position job/num
libai student 20202
dufu teacher Chinese

把这些信息放在同一个表格中,并设计程序输入人员信息然后输出

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct 
{
 char name[10];      //姓名
 char position;      //职位
 union
 {
  char job[8];   //科目
  int num;       //学号
 }st;           //共用体
}ts[2];         //结构体  输入2次数据
void main()
{
 int i;
 for (i = 0;i < 2;i++)
 {
  printf("输入:\n");
  scanf_s("%s%c", &ts[i].name,10, &ts[i].position,1);//姓名职位
  if (ts[i].position == 's')                         //如果是学生
   scanf_s("%d", &ts[i].st.num);
  else                                               //如果是老师
    scanf_s("%s", &ts[i].st.job,8);            //scanf_s(类型,地址,参数长度); 
  fflush(stdin);                                    //清空输入缓冲区
 }
 printf("姓名\t职位\t学号/科目\n");
 for (i = 0;i < 2;i++)
 {
  if (ts[i].position == 's')
   printf("%s\t%c\t%d\n", ts[i].name, ts[i].position, ts[i].st.num);      //输出信息
  else
   printf("%s\t%c\t%s\n", ts[i].name, ts[i].position, ts[i].st.job);  //输出信息 
 }
}

运行结果
效果如图:在这里插入图片描述

二、sizeof()的使用

sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数。
sizeof( 计算对象 )

#include <stdio.h>
void main()
{
 int a[] = { 1,2,3,4,5 };
 char st = 'g';
 int b=0, c=0, d=0,e=0,f=0;    //变量初始化
 //sizeof(a)计算对象a所占的字节数,a通常用来查看变量、数组或结构体等
 //分别求字符变量st,数组a[],a[0],int类型,char类型所占的字节数大小
 b = sizeof(st);               
 c = sizeof(a);
 d = sizeof(a[0]);
 e = sizeof(int);
 f = sizeof(char);
 printf("b=%d\nc=%d\nd=%d\ne=%d\nf=%d\n", b,c,d,e,f);
 
}

运行结果
程序效果如图

三、指针的使用

指针变量

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

未完待续。。。

指针与数组

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言入门教程之三天入门C语言(第二天结构体与指针使用) 的相关文章

随机推荐

  • 5 个免费开源的 3D 建模/渲染工具。

    5 个开源 3D 建模 渲染工具 3八 2011 作者 riku 本文采用 CC BY NC SA 2 5协议授权 转载请注明 本文链接 5 个免费开源的 3D 建模 渲染工具 1 Art of Illusion 跨平台 支持 Window
  • 15000cd是多少流明_光通量(lm)发光强度(cd)照度单位(lux)之间的关系

    光通量 lm 发光强度 cd 照度单位 lux 之间的关系 光通量 lm 由于人眼对不同波长的电磁波具有不同的灵敏度 我们不能直接用光源的辐 射功率或辐射通量来衡量光能量 必须采用以人眼对光的感觉量为基准的单位 光通量来衡量 光通量的用符号
  • SetUnhandledExceptionFilter处理未捕获异常

    一 首先看下百度上的对此函数的解释 设置异常捕获函数 当异常没有处理的时候 系统就会调用SetUnhandledExceptionFilter所设置异常处理函数 例如一些程序在出错的时候 会向用户报告说程序那出错就是利用这个 例如QQ 二
  • github时好时坏连接不上的问题

    1 找到自己的hosts文件 直接百度 hosts文件地址 一般都是C Windows System32 drivers etc 2 用ip在线查询工具查询github网站的ip地址 3 用记事本打开hosts文件 如图添加内容 我下载有的
  • 【Python】本地版 Whisper 自动转录器(附源码网址)

    目 录 一 实时自动语音转录器简介 二 开源Whisper实时转录器 三 pyinstaller 打包发布exe应用程序 四 修改版源代码 一 实时自动语音转录器简介 实时自动语音转录器是一种能够自动将语音信号转换为文字的应用程序 它通常具
  • 服务器被攻击怎么办?如何防止服务器被攻击?

    目前 服务器遭受攻击已经成为屡见不鲜的事情了 而且大部分企业都发生过服务器被攻击的情况 从而导致业务无法正常运行 造成严重的损失和影响 那么服务器被攻击怎么办 如何有效应对服务器被攻击呢 跟着小编来看看吧 1 换高防IP或切换高防服务器 流
  • 【华为OD机试真题 Java】创建二叉树

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • Binder机制详解(二)

    系列章节 Binder机制详解 一 Binder机制详解 三 文章目录 前言 一 什么是MMU 二 发展历史 三 相关概念 四 分页机制 1 页表的概念 2 页式内存管理 总结 前言 上一章通过一个例子让我们认识了Binder通信机制不同于
  • HbuilderX微信小程序uniapp分包小白教程&趟坑【伸手党福利】【干货】

    本教程为小白教程 主管操作 具体原理讲解欢迎评论区补充 微信小程序分包原因 1 多人开发 2 引入了大型js 3 单项目多模块需要分包 官方资料 https developers weixin qq com miniprogram dev
  • 扫描指定路径下有多少行代码

    import java io BufferedReader import java io File import java io FileReader import java io IOException Created by qiaoju
  • 使用蓝牙耳机听群晖ds218play中的音乐(audio station)

    缘起 有时需要欣赏nas中的音乐而又不影响家人 有什么方法呢 思路 研究了一下 发现新版的群晖dms支持蓝牙usb蓝牙适配器 可以使用audio station播放 蓝牙耳机收听 步骤 1 购买CSR USB蓝牙适配器 2 插入ds218p
  • 大数据CDC技术

    1 简介 CDC全称是Change Data Capture 是一种捕获增量数据的技术统称 目前主要应用在捕获数据库数据变更的技术 其中数据库变更包括DDL DML DCL等语句触发的变更 在数据备份容灾 数据分发 面向数仓的数据集成等场景
  • JavaScript实现WebService的http的Post请求

    javascript 这个脚本实现Webservice调用 function AjaxFunc var url http localhost MyService Service asmx var method DollarConvertTo
  • 使用Jmeter做压力测试,参数化

    1 首先在工作台下添加一个线程组 测试计划右键 添加 线程 用户 线程组 根据需求填写线程组信息 根据测试数据量填写 线程数也就是并发数 下面的调度时间代表规定的时间内完成并发 2 添加HTTP请求 在线程组下右键 添加 取样器 HTTP请
  • 微信小程序image组件的mode总结+介绍(包含heightFix)

    2 10 3版本后 微信小程序的图片即image组件新增了heightFix属性 mode 总共具有14种属性 满足各种情况的放置需要 14种属性可以分为两大类 一种是完全保留的缩放属性 一种是裁剪属性 原图 缩放属性 scaleToFil
  • 常见的List接口的实现类

    常见的List接口的实现类 ArrayList 数组实现 查询快 增删慢 轻量级 线程不安全 LinkedList 双向链表实现 增删快 查询慢 线程不安全 Vector 数组实现 重量级 线程安全 使用少 ArrayList实现类 pub
  • cesium-添加点线面可以动可编辑

    使用 const drawEntities new CesiumEntityDraw viewer drawEntities startDraw 需要绘制的类型 CesiumEntityDraw ts文件 import Cesium fro
  • RabbitMQ编程模型

    Hello World 在本教程的这一部分中 我们将用 Java 编写两个程序 发送单个消息的生产者和接收消息并将其打印出来的消费者 我们将忽略 Java API 中的一些细节 专注于这个非常简单的事情 以便开始 这是一个 Hello Wo
  • vue3的element-plus的el-dialog的样式加上scoped发现:deep()不再生效解决方案

    想要将 弹框 el dialog header el dialog body 的padding值设为0 但是 el dialog 用了 append to body 属性情况下 官网解释 Dialog 自身是否插入至 body 元素上 嵌套
  • C语言入门教程之三天入门C语言(第二天结构体与指针使用)

    三天学习C语言 第二步 一 C语言中的几种集合的表达形式 数组类型 数组扩展 结构体的表示 联合体的表示 二 sizeof 的使用 三 指针的使用 指针变量 未完待续 指针与数组 一 C语言中的几种集合的表达形式 在数学中一般一组数据的集合