一、结构体基础

    1、定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合

    2、特征:

      1)、结构体可以使得不同类型的数据进行结合

      2)、结构体可以使用内置的数据类型,包括指针

      3)、结构体可以使用自定义的数据类型,甚至自身(必须是命名结构体)

      4)、结构体成员的访问通过成员访问符号'.',若是结构体指针时,访问成员变量时可以使用->

      5)、结构体的普通定义

      6)、结构体的类型定义

      7)、结构体指针的定义及应用

      8)、结构体的大小

      9)、结构体其他
      

    3、基本定义及应用:

  #include <stdio.h>
#include <string.h> int main(int argc, char **argv)
{
struct _person{
char firstName[];
char lastName[];
char title[];
int age;
}; struct _person person1;
strcpy(person1.firstName, "guo");
strcpy(person1.lastName, "zhumulama");
strcpy(person1.title, "study hard every day!");
person1.age = ; printf("usual struct define:\n");
printf("The person1 info:\n firstName: %s\n lastName: %s\n title: %s\n and age: %d\n", person1.firstName, person1.lastName, person1.title, p erson1.age); typedef struct person{
char firstName[];
char lastName[];
char title[];
int age;
} Person; Person person2;
strcpy(person2.firstName, "zhang");
strcpy(person2.lastName, "hangchao");
strcpy(person2.title, "study hard every year!");
person2.age = ; printf("typedef struct define:\n");
printf("The person2 info:\n firstName: %s\n lastName: %s\n title: %s\n and age: %d\n", person2.firstName, person2.lastName, person2.title, p erson2.age); return ;
}

    代码说明:

      1)、第6-11行代码是结构体的普通定义

      2)、若使用普通定义,声明结构体的方式如13行所示

      3)、第22-27行代码是结构体的类型定义
      
      4)、若使用类型定义,声明结构体的方式如29行所示

      5)、第20行和36行,演示了结构体成员的访问;

      6)、一般情况下,使用结构体的类型定义比较方便;

    4、结构体指针及结构体成员指针的应用:

  #include <stdio.h>
#include <string.h>
#include <stdlib.h> int main(int argc, char **argv)
{
typedef struct _person{
char *firstName;
char *lastName;
char *title;
int age;
} Person; Person person1;
person1.firstName = (char *)malloc(strlen("zhang") + );
strcpy(person1.firstName, "zhang");
person1.lastName = (char *)malloc(strlen("hangchao") + );
strcpy(person1.lastName, "hangchao");
person1.title= (char *)malloc(strlen("study hard every year!") + );
strcpy(person1.title, "study hard every year!");
person1.age = ; printf("The person1 info:\n firstName: %s\n lastName: %s\n title: %s\n and age: %d\n", person1.firstName, person1.lastName, person1.title, person1.age);
printf("\n"); Person *ptrPerson = (Person *)malloc(sizeof(Person));
(*ptrPerson).firstName = (char *)malloc(strlen("wangu") + );
strcpy((*ptrPerson).firstName, "wangu");
(*ptrPerson).lastName = (char *)malloc(strlen("chaohang") + );
strcpy((*ptrPerson).lastName, "chaohang");
(*ptrPerson).title= (char *)malloc(strlen("study hard every dayd!") + );
strcpy((*ptrPerson).title, "study hard every dayd!");
(*ptrPerson).age = ; printf("The (*ptrPerson). info:\n firstName: %s\n lastName: %s\n title: %s\n and age: %d\n", (*ptrPerson).firstName, (*ptrPerson).lastName, (*ptrPerson).title, (*ptrPerson).age);
printf("\n"); Person *ptrPerson1 = (Person *)malloc(sizeof(Person));
ptrPerson1->firstName = (char *)malloc(strlen("wangu") + );
strcpy((*ptrPerson1).firstName, "wangu");
ptrPerson1->lastName = (char *)malloc(strlen("chaohang") + );
strcpy((*ptrPerson1).lastName, "chaohang");
ptrPerson1->title= (char *)malloc(strlen("study hard every dayd!") + );
strcpy((*ptrPerson1).title, "study hard every dayd!");
ptrPerson1->age = ; printf("The ptrPerson1-> info:\n firstName: %s\n lastName: %s\n title: %s\n and age: %d\n", ptrPerson1->firstName, ptrPerson1->lastName, ptrPerson1->title, ptrPerson1->age);
printf("\n"); return ;
}

    代码说明:

      1)、第7-12行代码是结构体的类型定义,结构体成员为指针变量

      2)、第14行声明结构体变量

      3)、第15,17,19行代码是结构体变量成员分配内存
      
      4)、第16,18,20行代码是结构体变量成员赋值内容

      5)、第23行,演示了结构体成员的访问;

      6)、第26行和38行声明结构体指针变量;

      7)、第26行和38行为结构体指针变量申请内存;
      
      8)、第35行代码是结构体指针变量访问方式,使用(* structName).是结构体指针访问成员的老式方法,现在基本不用;

      9)、第47行代码是结构体指针变量访问方式,使用structName->是结构体指针访问成员的新式方法,现在用的比较频繁;

35深入理解C指针之---结构体基础的更多相关文章

  1. C++指针和结构体基础知识

    学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...

  2. 36深入理解C指针之---结构体的内存处理

    一.有关结构体的内存处理包括,结构体指针和结构体成员指针的内存分配.结构体成员的数据对齐.结构体的内存释放 1.定义:与自定义数据类型(结构体)有关的内存分配.大小和释放问题 2.特征: 1).用内存 ...

  3. 37深入理解C指针之---结构体与指针

    一.结构体与指针 1.结构体的高级初始化.结构体的销毁.结构体池的应用 2.特征: 1).为了避免含有指针成员的结构体指针的初始化复杂操作,将所有初始化动作使用函数封装: 2).封装函数主要实现内存的 ...

  4. 深入理解C指针之六:指针和结构体

    原文:深入理解C指针之六:指针和结构体 C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结 ...

  5. c语言指针与结构体

    #include <stdio.h> #include <stdlib.h> struct mydata { int num; ]; }; void main1() { /*i ...

  6. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  7. 【阅读笔记】《C程序员 从校园到职场》第七章 指针和结构体

    原文地址:让你提前认识软件开发(13):指针及结构体的使用 CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/2387299 ...

  8. C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值

    C++ 利用指针和数组实现一个函数返回多个值demo1 #include <iostream> using namespace std; int* test(int,int,int); i ...

  9. C语言--- 高级指针2(结构体指针,数组作为函数参数)

    一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[ ...

随机推荐

  1. CentOS7 中使用 firewall-cmd 控制端口和端口转发

    0X00 firewalld 守护进程 firewall-cmd命令需要firewalld进程处于运行状态.我们可以使用systemctl status/start/stop/restart fire ...

  2. JAVA实现webSocket网页聊天室

    一.什么是webSocket WebSocket 是一种网络通信协议,是持久化协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全 ...

  3. bug汇总

    bug 2018年8月23日 bug 1:散点图画不出来. plt.scatter(validation_examples["longitude"], validation_exa ...

  4. vsftpd服务安装与虚拟用户配置

    vsftpd的全名是“Very secure FTP Daemon” 一.安装vsftpd安装db4-util用于生成认证文件 yum -y install db4-utils 安装vsftpd yu ...

  5. shell中变量字符串的截取 与 带颜色字体、背景输出

    字符串截取 假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 /及其左边的字符串:dir ...

  6. STVP烧录教程

    可以运行独立的烧录软件ST Visual Programmer (STVP)进行STM8芯片烧录.运行“开始”->ST Toolset->Development Tools -> S ...

  7. jcenter maven 库

    先了解compile ‘com.squareup.okhttp:okhttp:2.4.0’的意义 首先我们要了解compile ‘com.squareup.okhttp:okhttp:2.4.0’这一 ...

  8. curl download zip file

    https://askubuntu.com/questions/285976/download-zip-file-with-curl-command

  9. 01 Java 代码是怎么运行的

    Java代码运行的方式 1:在开发工具中运行 2:双击 jar 文件运行 3:在命令行中运行 4:在网页中运行 上述运行方式都离不开 JRE,也就是 Java 运行时环境.实际上 JRE 仅包含运行 ...

  10. 浏览器提示ERR_CONTENT_DECODING_FAILED,Gzip压缩数据无法解压

    最近在页面上有个显示数据表格的功能,数据由后台传给前台JS表格插件.数据格式为JSON 由于数据量很大,就想到用GZIP压缩以后传给前台.压缩前,某个表格的数据量达到3M多,用GZIP压缩后就200K ...