我的编程空间,编程开发者的网络收藏夹
学习永远不晚

深入浅析C/C++语言结构体指针的使用注意事项

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

深入浅析C/C++语言结构体指针的使用注意事项

主要内容

  • 结构体的使用 - 定义,赋值,结构体指针
  • 结构体作为函数参数的使用
  • 指针的使用

代码内容重点

1.结构体的使用 - 定义,赋值,结构体指针

2.结构体作为函数参数的使用 - 最好使用结构体指针作为参数,而不是结构体

因为当传递的结构体作为参数,数据量较大时,会占用较大的时间与空间,效率很低

使用结构体指针作为函数参数,比用结构体本身作参数效率高很多,当只是读取而不希望修改结构体值时,可以添加const防止改变结构体成员值

(STAFF_T const *p)

3.指针的使用 - 指针的定义,初始化,申请内存空间(malloc),释放(free)

指针在32位系统占用4Byte,在64位系统占用8Byte

注意:

使用malloc申请空间的指针,当不使用后需要手动释放,避免占用内存,并最好重新赋值为NULL,例p = NULL;

malloc后记得判断是否成功

指针的定义和初始化

int* p;

int i;

p = &i;

或者初始化为NULL

int* p = NULL;

C语言代码例子

这C代码在VSCode和GDB online上成功运行调试




#include <stdio.h>
#include <malloc.h>
#include <string.h>

typedef struct Staff_t{
    char* name;
    char sex;
    short age;
    float salary;
    char* date;
} STAFF_T;

void print_msg(STAFF_T const *p); // 结构体指针作为函数参数的使用例子

int main()
{   
    int size;
    
    //STAFF_T sta; // 定义一个结构体
    //staff = &sta; // 另外一种结构体初始化
    STAFF_T* staff = NULL; // 定义一个结构体指针,并初始化为NULL;

    // 为结构体申请内存空间,需要强制类型转换(这里为结构体指针类型),注意malloc成功返回字节数,失败返回NULL
    staff = (STAFF_T*)malloc(sizeof(STAFF_T)); 
    // 判断是否成功申请空间,只有申请成功才能使用,这一步很重要,许多人都容易忘记
    if (staff == NULL)
    {
        printf("malloc(STAFF_T) ERROR\n");
        return -1;
    }

    // 这里几行调试用,打印出在32/64位系统中一些数据类型所占用的内存空间大小不同
    size = sizeof(STAFF_T);
    printf("STAFF_T size = %d\n",size);
    printf("SIZEOF:\n char*:%lu, char:%lu,short:%lu,float:%lu \n",sizeof(char*),sizeof(char),sizeof(short),sizeof(float));

    staff->name = (char*)malloc(20*sizeof(char));
    
    // 在C语言中,staff->name以下的两种赋值方式都可以
    staff->name = "duruofei";//strcpy(staff->name, "duruofei");
    staff->sex = 'M';
    staff->age = 29;
    staff->salary = 15000;
    staff->date = (char*)malloc(20*sizeof(char));
    strcpy(staff->date,"2021-12-09");//strcpy(staff->date, "2021-12-09");
    
    // 传递结构体指针
    print_msg(staff); // 参数为指针常量,因为这里只是读取staff的值,而不希望修改staff的内容

    // 最后释放指针,并赋值为NULL。因为指针free后指针所指向的内存地址可以被其他变量使用,但指针本身还是指向原来地址,还可以使用,防止野指针
    free(staff);
    staff = NULL;

    printf("Hello World\n");

    return 0;
}


void print_msg(STAFF_T const *p)
{
    // 参数为指针常量,因为这里只是读取p的值,而不希望修改p的内容
    if (p == NULL) 
    {
        printf("print_msg: p is NULL\n");
    }
    
    printf("Name:%s, Sex:%c, Age:%d, Salary:%0.2f, Date:%s\n",\
            p->name, p->sex, p->age, p->salary, p->date);
}

到此这篇关于C/C++语言结构体指针的使用的文章就介绍到这了,更多相关C++结构体内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

深入浅析C/C++语言结构体指针的使用注意事项

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言结构体指针的具体使用

结构体指针是一种非常有用的数据类型,它可以让我们更方便地操作结构体,本文主要介绍了C语言结构体指针的具体使用,非常具有实用价值,需要的朋友可以参考下
2023-05-20

C语言指针的使用技巧与注意事项

C语言指针的应用技巧与注意事项一、引言作为一种面向过程的编程语言,C语言具有高效、灵活的特点。而指针则是C语言中一个非常重要的概念,对于理解和掌握C语言来说至关重要。本文将介绍C语言中指针的应用技巧与注意事项,并给出具体的代码示例。二
C语言指针的使用技巧与注意事项
2024-02-26

C语言汇编分析传递结构体指针比传递结构体变量高效的深层原因

本文章使用的工具是vs2010,本篇文章主要讲解结构体指针作为参数传递与结构体变量作为参数传递的对比,不谈值传递与址传递的概念
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录