一、结构体基础

    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. iOS 解决ipv6问题

    解决ipv6的方法有很多种,由于现在国内的网络运营商还在使用ipv4的网络环境,所以appstore应用不可能大范围去修改自己的服务器, 而且国内的云服务器几乎没有ipv6地址. 这里附上苹果开发平台 ...

  2. bash编程之case语句,函数

    bash脚本编程:之case语句   条件测试: 0: 成功 1-255: 失败   命令: [ expression ] [[ expression ]] test expression   exP ...

  3. 为什么要在函数内部声明 var that = this 呢

    看一个例子 $('#conten').click(function(){ //this是被点击的#conten var that =this; $('.conten').each(function() ...

  4. Keras预训练模型下载后保存路径

    https://blog.csdn.net/xiaohuihui1994/article/details/83340080

  5. LeetCode之Weekly Contest 90

    LeetCode第90场周赛记录 第一题:亲密字符串 问题: 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回  ...

  6. 使用jmeter做简单的压测(检查点、负载设置、聚合报告)

    1.添加断言(检查点) 在需要压测的接口下添加--断言--响应断言,取接口响应中包含有的数据即可 检查点HTTP请求-->断言-->响应断言1.名称.注释2.Apply to//作用于哪里 ...

  7. Python基础——集合(set)

    集合可以去除掉列表中重复的元素. 创建 list1=[123,123,456,789] list1=set(list1) list1 set1=set() type(set1) set1=set([1 ...

  8. Nordic Collegiate Programming Contest 2015​ E. Entertainment Box

    Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...

  9. Linux学习-可唤醒停机期间的工作任务

    什么是 anacron anacron 并不是用来取代 crontab 的,anacron 存在的目的就在于我们上头提到的,在处理非 24 小 时一直启动的 Linux 系统的 crontab 的执行 ...

  10. MySQL基本命令和常用数据库对象

    MySQL基本命令: 连接远程主机的MySQL服务(为了保证安全性,执行下面命令时,可以省略-p后面的密码,执行命令后系统会提示输入密码) mysql -p 密码 -u 用户名 -h 主机地址 --d ...