C语言结构体和结构体指针的简单用法
这里总结一下自己的学习笔记,关于C语言当中的结构体指针的用法,以及结构体简单使用。
简单介绍一下今天出场的嘉宾–>结构体和结构体指针
什么是结构体:
1,定义多种类型的变量
2,和数组的区别:
数组:类型相同的元素合集
结构体:可以涵盖多种不同的类型合集
3,C语言一般是面向过程的编程语言,JAVA当中有一个和C语言比较相同的东西就是对象(class)
Java把多种东西放在class当中组成一个包
类似的C语言也是可以把多种类型放在结构体当中来使用,
未必C语言就不能参与面向对象的
所以可以使用一些面向对象的思想来做一些C语言的编程
4,结构体的数据量可以很大,只要是你有定义
简单来说,结构体就是将众多的变量放在一起的集合,可以理解为void型变量,在C语言当中它包含一个关键字:struct
#include <stdio.h>
struct abc
{
int a;
char name[128];
};
int main()
{
struct abc str //这里是自己定义的变量,就是之后使用的那些
scanf("%s",str.a);
strcpy(str.name,"你好");
printf("输出:%s:%d\n",str.name,str.str.a);
return 0;
}
这里的一个需要注意的地方就是,结构体的定义之后是带有一个分号的,和一般的函数定义还是有区别的,要是不加这个分号的话,报错会在mian函数当中出现。
要是在结构体当中使用指针,就需要申请空间,不然指针就是一个野指针,(windows系统运行会崩溃,Linux下运行会出现段错误)
申请空间使用malloc
int main()
{
char *str;
str = (char *) malloc(256); //这里是自己需要申请的空间的大小
memset (str,'\0',256); //这里的'\0'是空间当中的每一项都是'\0';
/*'\0'是这里的每一项都是这个,'\0'一般是语句结束后面带的,想要详细了解的可以去某度,能力有限,就不展开赘述了哈!*/
/*这里返回的类型是刚刚的char型,字符串需要在当前的空间当中初始化
使用memset*/
}
这里讲一个小小的知识点:
指针在Windows系统当中是4个字节,在Linux系统下是8个字节。
什么是结构体指针:
OK!结构体简单的总结一下,接下来就是它的好基友–>结构体指针
可以这样理解吧!结构体指针和普通的指针一样,只是它一般指向结构体当中的变量
简单写了一段的代码(能力有限哈!)
#include <stdio.h>
#include <stdlib.h>
struct student
{
int score; //这里申请的空间是4个字节
char name[256]; //这里很明显是256 ,总共加起来就是260个字节的空间
};
int main()
{
struct student *p;
p = (struct student *)malloc(256); //结构体指针返回的是一个 void型的变量
p->score = 98;
strcpy(p->name,"李四");
printf("分数是:%d\n",p->score);
printf("名字是:%s\n",p->name);
system("pause");
return 0;
}
运行之后的结果:
注意一个点就是:使用结构体指针的时候点运算符就需要变为->,运算符**,(在有些编译器下面,就算不使用结构体指针,第一次打出“str.name”类似的使用语句,点运算符也会变为->,(本人在VS code当中使用的候发现的))
还有就是:
1、使用结构体指针需要注意的:指针是不是野指针或者NULL
2、指针是存放地址的变量
最后一个小tips:
当结构体指针使用完毕之后,如果需要用回原来的结构体,这个时候需要去释放指针申请的空间。
使用两个简单的的句子:
free(p); //free是释放刚刚申请的空间
p = &str;//这里是将地址返回给结构体,注意:不是结构体指针
其实不去释放内存空间对于新手来说问题也不大(屁啊!学习要认真呢!),释放空间避免浪费。
能力有限,把自己的学习总结放在这里了,有不正确的地方欢迎留言指正哈!