继大一萌新写的c语言都能看懂版(一)_Why_does_it_work的博客-CSDN博客
之后我想谈一谈数据
目录
数据
结构体(struct)
结构体的初始化
结构体指针
结构体嵌套
数据
我们在初始编程的时候,我们写完头文件之后,通过多个函数和一个主函数或者通过一个主函数对数据进行操作,数据有什么?上篇文章就提到了,有基本类型,构造类型,指针类型和空类型viod
我想先谈一谈上篇文章没有写到的,指针类型数据,我们知道指针就是地址,指针变量就是变量,是两个不一样的东西,这次我想通过大一萌新的角度,思考一个问题,地址是什么,它在干什么?
其实每个人都知道,cpu处理器是通过地址访问内存单元,上一篇说到变量的时候,说变量是由变量名,变量值和存储单元构成,内存单元和地址真的一样吗?
显然是不一样的,这些都是由于口头表达不规范给我这个萌新带来重重困扰(不知道大家是否有这样的问题)cpu通过地址指向内存单元,是因为地址作为一个数据,它自身具有指向性,地址是指针,指针是地址,地址由于指向性指向内存单元,就是指向数据,所以指针具有指向数据的作用,那指针指向变量呢,指针变量的定义为指针变量所指向的是变量值,变量所存储的是指向这个变量值所存在的地址,其实它就是一个变量,这里的变量指的是基本数据类型,整形,浮点型等等,指针十分强大它也可以指向一个函数(上一期评论区大佬做了解释),也可以在函数中使用指针变量,听了上述讲述,希望大家有所收获,对于指针和指针函数和指针数组有一个新的理解,从数据的角度切入
结构体(struct)
在学习过程中,我们把非常长的一串数十分多在不好处理的时候想到的是数组,如果许多变量不好处理呢?
把一些相关的变量或者不太相关的变量组合在一起,以一个整体对象进行描述
这就是就结构体(struct)你可以简单理解为数据集合。
定义:
sturct 结构名
{成员列表;
};变量名列表;
//一定要加分号
知道了怎么定义,一定别忘记分号,在定义结构体之后,就要定义结构体变量
图片更加直观吧,简单来说就是将不同的数据类型整合成一个有机的整体,为了以后的使用
操作一下把!
成员列表:
struct student
{
int num;
char name[20];
char sex;
float score;
};
由上面的代码可以得出,我们不能简单理解变量的集合,是一个数目固定,类型不同的若干个有序变量的集合,从结构定义中可以看到,结构允许把不同类型的数据结构组成一个整体。
我们也可以通过define进行简化
#define ABC struct student
ABC
{
int num;
char name[20];
char sex;
float score;
};
久等了.....完试半天缓不过来藍
结构体的初始化
结构体使用中,需要定义结构体变量来实现后面调用操作变得简单,它和其他变量一样都可以进行初始化操作
#includestruct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book = {"都能听懂版", "大一萌新", "编程语言", 210448596}; int main() { printf("title : %snauthor: %snsubject: %snbook_id: %dn", book.title, book.author, book.subject, book.book_id); return 0; }
输出结果:
title : 都能听懂版
author:大一萌新
subject: 编程语言
book_id: 210448596(qq)
在我们使用这个结构体内部的变量时候可以使用两个符号"."和"->"
在我看来记住一句话就好了
当结构体是一个指针时要引用结构体的成员就用-> 而如果不是指针就用.
说完了结构体的使用,用一道题巩固一下的话
编写程序,从键盘输入 n (n<10)个学生的学号(学号为4位的整数,从1000开始)、成绩并存入结构数组中,查找并输出成绩最高的学生信息。
#include#define N 8 typedef struct student { int no; int score; }student; int main() { student s[1000]; int n,i; int max; scanf("%d",&n); for(i=0;i 如果细化来说:结构体可以分为结构体变量,结构体数组,还有结构体指针
其实结构体数组和结构体变量相差不大不过数组经常用来表示数据结构的一个群体,比如一个学生的档案或者一个车间职工的工资表等等,定义的时候类似,只需要说明是一个数组就可以
struct student { int id; int name[20]; char sex; float score; }stu[5];定义了一个结构体数组,stu[5];一共有五个元素每个数组元素都有struct student的结构形式
结构体指针
- 一个指针变量当用来指向一个结构体变量时,称之为结构体指针变量(根据上面数据角度的理解指针就基本上概念拿下了吧)
- 格式: struct 结构名 *结构指针变量名
// 定义一个结构体类型 struct Student { char *name; int age; }; // 定义一个结构体变量 struct Student stu = {“lnj", 18}; // 定义一个指向结构体的指针变量 struct Student *p; // 指向结构体变量stu p = &stu; // 方式1:结构体变量名.成员名 printf("name=%s, age = %d n", stu.name, stu.age); // 方式2:(*指针变量名).成员名 printf("name=%s, age = %d n", (*p).name, (*p).age); // 方式3:指针变量名->成员名 printf("name=%s, age = %d n", p->name, p->age); return 0; }当结构体是一个指针时要引用结构体的成员就用-> 而如果不是指针就用.
通过结构体指针访问结构体成员, 可以通过以下两种方式
- (*结构指针变量).成员名
- 结构指针变量->成员名(用熟)
- (pstu)两侧的括号不可少,因为成员符“.”的优先级高于“”。
- 如去掉括号写作pstu.num则等效于(pstu.num),这样,意义就完全不对了
- 所以我还是觉得那句话不容易出错误
结构体嵌套
简单来说就是一个结构体里面放着一个结构体
例如
struct Date{ int month; int day; int year; } struct stu{ int num; char *name; char sex; struct Date birthday; Float score; }这个效果就是
还有一个就是结构体变量的嵌套准确来说是一个结构体只能嵌套别的结构体和这个结构体的地址
后续还有一点点的内容链表什么的,我之前(第一篇)内容范围还是太大了,编程是一个慢慢积累的过程,这些知识都是慢慢被挖掘的过程,好多细节我没有提到,比如说变量赋值的过程中利用变量作为中间体进行代换,就比如输入输出里除了printf,scanf其他的一些作用,比如那些空格,回车在输出结果的表现等等,我是一个学了c语言半个月左右的大一的学生 我相信其实很多人在这个时候会遇到一些挫折和瓶颈,我希望通过写一些学习感想慢慢梳理自己紊乱不堪的知识碎片实现知识与灵活运用的实现,我下周要开始学c++和python愿我们共同努力,给我分享一些你们的学习经验一起分享一起进步。时间很长我会一点一点进步,补足文章的不足,愿各位留下你们的问题和我文章的不足,我有时间就会持续写,谢谢大家!



