美文网首页
c++ 结构体

c++ 结构体

作者: arkliu | 来源:发表于2022-11-26 09:04 被阅读0次

定义结构体

// c++11可以为结构体提供默认值,如下:
struct Person {
    char name[50] ="小六子";
    int age= 22;
    double weight = 70.5;
    char sex = 'x';
    bool normal = false;
};

struct Person person;
cout << "name = "<<person.name<<"  age ="<<person.age<<"  weight="<<person.weight<<"  sex ="<<person.sex<<"  normal ="<<person.normal;

创建结构体变量

struct Person per1;
// 创建的同时初始化
struct Person per2 = {"张三", 33, 60, 'f', true};
struct Person per3 = {0}; // 全部的成员将被设置为0

还可以在定义结构体时,创建结构体变量

struct Person {
    char name[50];
    int age;
    double weight;
    char sex;
    bool normal;
} per{"张三", 33, 60, 'f', true};

结构体内存对齐

修改结构体内存对齐的参数

#pragma pack(1)  1表示没有间隙,即和结构体的成员大小总和保持一致

清空结构体

创建的结构体如果么有初始化,成员中有垃圾值,可以用memset或者bzero把结构体中全部成员清零。

struct Person per1;
memset(&per1, 0, sizeof(struct Person));
bzero(&per1, sizeof(struct Person));

复制结构体

  • 使用memcpy
  • 直接使用=
int main() {
    struct Person {
        char name[50];
        int age;
        double weight;
        char sex;
        bool normal;
    } person{"张三", 33, 60, 'f', true};

    struct Person per1;
    memset(&per1, 0, sizeof(struct Person));
    per1 = person;
    cout << "name = "<<per1.name<<"  age ="<<per1.age<<"  weight="<<per1.weight<<"  sex ="<<per1.sex<<"  normal ="<<per1.normal<< endl;

    return 0;   
}

结构体指针做数组参数

#include <iostream>
#include<string>
using namespace std;

struct Person {
        char name[50];
        int age;
        double weight;
        char sex;
        bool normal;
    } person{"张三", 33, 60, 'f', true};

void show(struct Person * p) {
    cout << "name = "<<p->name<<"  age ="<<p->age<<"  weight="<<p->weight<<"  sex ="<<p->sex<<"  normal ="<<p->normal<< endl;
}

int main() {
    show(&person);
    return 0;   
}


结构体数组

#include <iostream>
#include<string>
#include <cstring>
using namespace std;

struct Person {
        char name[50];
        int age;
    };

int main() {
    struct Person pers[2];
    memset(pers, 0, sizeof(pers));
    strcpy(pers[0].name, "李四");
    pers[0].age = 33;

    strcpy(pers[1].name, "张三");
    pers[1].age = 15;

    for (size_t i = 0; i < 2; i++)
    {
        cout <<"name:"<<pers[i].name<<"   age:"<<pers[i].age<<endl;
    }
    return 0;   
}


结构体中的指针

如果结构体中的指针指向的是动态分配的内存地址:

  • 对结构体用sizeof运算符,可能没有意义
  • 对结构体用memset函数可能造成内存泄漏
  • c++中的sting中有一个指向的是动态分配的内存地址指针。

相关文章

  • JSON数据转C++结构体

    JSON数据自动生成C++结构体 JSON数据自动生成C++结构体背景nlohmann/json基础Python自...

  • Texture之ASDisplayNodeInternal.h

    c++容器 c++类型:atomic_uint 罕见的c++语法 初始化结构体 c结构体 检查指定类是否重写了另一...

  • C++常用容器复习

    cin>>a cout<

  • c++类相关

    c++结构体与c结构体的区别 c语言 c++ c++类的使用 类的权限管理 对类的成员的访问做限制 private...

  • 01-OC对象的本质

    OC是通过C/C++的什么数据结构实现我们的OC对象呢 结构体--OC对象的本质就是C/C++的结构体 Class...

  • C++中结构体

    C++中结构体并不是C中的结构体了 C++的结构体更像是一种特殊的类 他与类一样 可以有public privat...

  • NDK开发—结构体、共用体与C++基础(三)

    目录 结构体、共用体与C++基础11、结构体字节对齐2、共用体3、C++ 输出函数符号兼容引用字符串C字符串字符串...

  • C++总结

    结构体成员变量是什么? C++结构体怎么定义 struct aa { }或者typedef struct aa {...

  • C++系列 --- 结构体、权限修饰符、类简介

    一、结构体 结构体:自定义的数据类型 C++ 中的结构和C中的结构有什么区别? C++中的结构除具备了C中的所有功...

  • JNI总结

    java调用c/c++ 在C中:JNIEnv 结构体指针别名env二级指针 在C++中:JNIEnv 是一个结构体...

网友评论

      本文标题:c++ 结构体

      本文链接:https://www.haomeiwen.com/subject/uzkdtdtx.html