C语言--结构体

序:从事安卓开发也快5年了,上份工作是关于人脸识别的定制化的板子,在工作过程中要用到很多关于linux的知识。了解linux,也就更理解了上层安卓java层的实现。之前遇到需求,执行shell命令,java执行20到30毫秒,严重影响效率,然后有底层的同事提供接口,执行只需要1毫秒,没错,就有这么大的差别。之前就一直想往安卓底层学习,通过上份工作,更对C和C++的产生了浓厚兴趣。和安卓相关的,就从NDK开始了。计划先学C语言,然后C++,然后JNI,最后NDK.感觉废话太多,进入正题

1.结构体的理解:

   结构体可以类比为java中的类,但是和java之前存在根本区别:

    1.java是属于面向对象,C是属于面向过程,所以结构体不会有面向对象的特性,所以结构体没有继承的概念,即不存在父子类的关系。

     2.结构体和java的类的内存分配不同:在java中,基本数据类型(八种:int,char,short,double,long,float,byte,boolean)的内存都分配在栈区,其他非基本数据类型的对象都分配在堆区,栈区只存储该对象的引用。而C语言中的结构体,申明之后,和基本数据类型都有可能存在栈区(使用*alloca()函数动态申请内存时,基本数据类型和其他结构体会存在堆区,需要手动管理内存的申请和释放)。

 2.用法:

    1.常规用法:定义结构体Student,

struct Student
{
	char name[20];
	int age;
};

void main(){
	struct Student student = { "李红", 12 };
	printf("学生的姓名:%s, 年龄:%d\n", student.name, student.age);
	system("pause");
}

   2.结构体申明时初始化,和初始化指针

struct Student
{
	char name[20];
	int age;
}peter, *peterP;

void main(){
	peter.age = 12;
	strcpy(peter.name, "皮特");
	printf("学生peter的姓名:%s, 年龄:%d\n", peter.name, peter.age);

	peterP = &peter;
	peterP->age = 20;
	strcpy(peterP->name, "皮特1");

	printf("学生peter修改后的姓名:%s, 年龄:%d\n", peter.name, peter.age);

	system("pause");
}

3.设置别名,这里说一下,设置别名之后,就可以像其他基本数据类型一样,不需要在前面加上“struct”。

// 格式
typedef struct name{
	char name[20];
	int sex;
} aligname;


// 示例
typedef struct Teaccher{
	char name[20];
	int sex;
} Teaccher;

void main(){
	Teaccher t;
	strcpy(t.name, "张华老师");
	t.sex = 1;
	printf("老师的姓名:%s, 性别%d\n", t.name, t.sex);
	system("pause");
}

4.无名称的结构体(单例)

struct 
{
	int width;
}World;

void main(){

	World.width = 100;
	printf("world的宽:%d\n", World.width);
	system("pause");
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值