C++, C, NDK

4.【干货】火爆全网的《超全C精品教程》C 结构体(结构体指针,

2023-03-06  本文已影响0人  鹏城十八少

结构体的使用大全! 

大纲:

1. 结构体使用和作用

2. 结构体指针

3. 结构体和指针,和联合体的区别

4.结构体数组和结构体偏移

5. 结构体和联合体, 计算他们的大小

---------------------------------------------

结构体的作用: 

数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为小数,因为数据类型不同,显然不能用一个数组来存放。

1.结构体的定义和使用

第一种方式:

struct Worker {// 相当于jav的class

    int age;

    double salary;

    char name[10];

}

struct Worker worker = {10, 1.0, "ddd"};

    worker.age =10;

//    worker.name="dddd";

    stpcpy(worker.name, "ddds"); // 修改char[]

第二种方式: 

struct Worker {// 相当于jav的class

    int age;

    double salary;

    char name[10];

}peng, caihua; // 结构体的别名, 会有一个默认初始值

使用! 

peng.age =0;

caihua.name;

2.结构体指针和动态内存开辟

结构体可以操作变量, 结构体指针也可以操作变量,2者有什么区别

Worker *workerP = &worker;

workerP->age =24; // 结构体指针,通过箭头方式

常用的方式: 动态申请内存的方式! 

Worker *workerHua = (Worker *) malloc(sizeof(Worker));

workerHua->age =0;

结构指针

struct Books *struct_pointer;

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

#include<iostream>

#include<cstring>

usingnamespacestd;

voidprintBook(structBooks*book);

structBooks

{

chartitle[50];

charauthor[50];

charsubject[100];

intbook_id;

};

intmain( )

{

BooksBook1;// 定义结构体类型 Books 的变量 Book1

BooksBook2;// 定义结构体类型 Books 的变量 Book2

// Book1 详述

strcpy(Book1.title,"C++ 教程");

strcpy(Book1.author,"Runoob");

strcpy(Book1.subject,"编程语言");

Book1.book_id=12345;

// Book2 详述

strcpy(Book2.title,"CSS 教程");

strcpy(Book2.author,"Runoob");

strcpy(Book2.subject,"前端技术");

Book2.book_id=12346;

// 通过传 Book1 的地址来输出 Book1 信息

printBook(&Book1);

// 通过传 Book2 的地址来输出 Book2 信息

printBook(&Book2);

return0;

}

// 该函数以结构指针作为参数

voidprintBook(structBooks*book)

{

cout<<"书标题  : "<<book->title<<endl;

cout<<"书作者 : "<<book->author<<endl;

cout<<"书类目 : "<<book->subject<<endl;

cout<<"书 ID : "<<book->book_id<<endl;

}

分析: 

struct Books

{

   char  title[50];

   char  author[50];

   char  subject[100];

   int   book_id;

};

 Books Book1; 

printBook( &Book1 );

void printBook( struct Books *book )

{

   cout << "书标题  : " << book->title <<endl;

   cout << "书作者 : " << book->author <<endl;

   cout << "书类目 : " << book->subject <<endl;

   cout << "书 ID : " << book->book_id <<endl;

}

解释: 结构体指针式一个地址,对它取地址

结构体不用new出来,他里面放的是int, int也是不用new的.

它在栈区, 自动释放掉, 堆区的内存需要手动释放掉!

strcpy(book->autohor,"修改后的东西");

cout <<"autohor"<<book->autohor <<endl;

cout <<"title"<<book->title <<endl;

cout <<"subject"<<book->subject <<endl;

cout <<"book_id"<<book->book_id <<endl;

};

总结: 

3. 结构体和结构体指针的区别

结构体指针保护2部分功能, 1.传递整个对象一样的东西, 2.可以通过指针修改里面的变量! 

结构体套指针

比如: 结构体stu. 里面有个char 指针 name!  char *name

structstu{

char*name;//姓名

intnum;//学号

intage;//年龄

chargroup;//所在小组

floatscore;//成绩

}

1).联合体和类的区别

结构体设计的意义是什么?  (为了解决传递多个参数的问题)

为了解决传递多个参数的问题, C里面是没有对象的! 

那用指针可以吗?

不行,指针只是传递内存的地址, 不知道具体的类型. 要有结构体指针! 

2).结构体和结构体指针的的区别

结构体可以直接改属性

结构体指针也可以改属性!

2者区别?

3).结构体和类的区别? 

1. C是面向过程的,结构体是C中包含的, C++面向对象,所以它需要对象! 

结构体是C里边的,类是C++新加的,类有构造函数和析构函数,还引入了封装、继承和多态的概念,比结构体更符合面向对象的设计概念

保留结构体完全是为了兼容C程序,让原本习惯使用C的人不至于一下子不能用

2. C语言中的 struct 只能包含变量,而 C++ 中的 class 除了可以包含变量,还可以包含函数

4.结构体数组的使用

结构体偏移量问题!

结构体可以嵌套

结构体的使用: JNIENV

typedef 关键字

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。例如:

typedefstructBooks

{

chartitle[50];

charauthor[50];

charsubject[100];

intbook_id;

}Books;

现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

BooksBook1,Book2;

您可以使用 typedef 关键字来定义非结构类型,如下所示:

typedef long int *pint32;

pint32 x, y, z;

x, y 和 z 都是指向长整型 long int 的指针。

3.结构体和结构体这还能取别名

typedef 

4.结构体的大小计算

为什么要知道! 

举例: 因为如果是一个结构体数组, 要移动,如何移动?

计算规则: 

1). 以最大的计算

2).不足的,进行满算

3)..............

结构体大小计算: 有很多规则:

1.按照最大的字节去计算

2. 算的时候只会按照基本数据类型去算

3. 首先会把所有的字节加起来, 是否能够整除最大属性的字节数,

如果不够为网上累加,一直驾到能整除位置

联合体

在C语言中,变量的定义是分配存储空间的过程。一般的,每个变量都具有其独有的存储空间,那么可不可以在同一个内存空间中存储不同的数据类型(不是同事存储)呢?

答案是可以的,使用联合体就可以达到这样的目

5.联合体的定义和使用

用途: 减少内存, 一般只有一个值! 

您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。

定义共用体

为了定义共用体,您必须使用 union 语句,

6.联合体大小计算

共用体占用的内存应足够存储共用体中最大的成员。

https://juejin.cn/post/7038831068618686495

我们首先首先定义一个结构类型,

struct student

{

     char *name;

      int ages;

};

再根据类型定义结构体变量 struct student stu={"Rose",15};定义一个指针指向结构体类型,struct student *p;把结构体变量stu的地址赋给指针变量p,p=&stu;我们可以有3种方式来访问结构体中的属性ages:

stu.ages=15;

(*p).ages=15;

p->ages=15;

不过第三种方式在C语言中只能用来指向结构体。

===============================================

上一篇 下一篇

猜你喜欢

热点阅读