精华内容
下载资源
问答
  • c语言结构体变量
    2021-05-20 13:23:43

    操作系统 : CentOS7.3.1611_x64

    gcc版本 :4.8.5

    问题描述

    C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化?

    解决方案

    将结构体的定义放入源码件中实现,头文件只放声明。

    比如有如下结构体(obj.h文件中定义):

    struct Obj {

    int id;

    char *name;

    };

    typedef struct Obj Obj;

    并定义如下变量:

    Obj *o;

    正常情况下,可以通过如下代码正常访问结构体中的变量:

    printf("id : %d\n",o->id);

    如果将结构体的定义放入源文件中,上述代码将会报如下错误:

    error: dereferencing pointer to incomplete type

    printf("id : %d\n",o->id);

    如需外部访问,可通过添加相关接口实现,比如:

    int get_obj_id(const Obj* o)

    {

    int ret = ;

    if(o)

    {

    ret = o.id;

    }

    return ret;

    }

    完整示例代码如下:

    好,就这些了,希望对你有帮助。

    本文github地址:

    欢迎补充

    将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

    C语言结构体变量字节对齐问题总结

    结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题.从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但 ...

    C语言结构体变量内存分配与地址对齐

    地址对齐简单来说就是为了提高访问内存的速度. 数组的地址分配比较简单,由于数据类型相同,地址对齐是一件自然而然的事情. 结构体由于存在不同基本数据类型的组合,所以地址对齐存在不同情况,但总体来说有以下 ...

    C语言中两个相同类型的结构体变量之间是可以相互直接赋值的

    C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...

    C语言中结构体变量之间赋值

    近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...

    c语言结构体2之变量赋值于字符串

    #include #include struct dangdang { ]; ]; ]; int num; int bugnum; ] ...

    C语言 指向结构体变量的指针

    一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Stu ...

    C语言结构体对齐

    1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...

    c语言结构体

    [C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...

    随机推荐

    Codeforces Round #382 (Div. 2) D. Taxes 哥德巴赫猜想

    D. Taxes 题目链接 http://codeforces.com/contest/735/problem/D 题面 Mr. Funt now lives in a country with a ...

    2012杀毒软件排行榜TOP10强

    2012杀毒软件排行榜TOP10强 1:avast!杀毒软件       来自捷克的avast!,已有数十年的历史,它在国外市场一直处于领先地位.avast!分为家庭版.专业版.家庭网络特别版.和服务 ...

    java web开发问题集合

    前台和后台的交流到底是借助什么?servlet?xml? 我们能感觉到用servlet,但是我们是如何使用servlet的?不是现在web.xml部署后,才能触发吗?所以其实我们是本质是借助XML文件 ...

    MFC架构

    MFC的六大关键技术: 1)MFC程序的初始化过程 2)消息映射 3)运行时类型识别(RTTI) 4)动态创建 5)永久保存 6)消息传递 一.MFC的初始化过程: MFC的架构组成: 1.要有CWi ...

    WindowsServer问题总结

    1.System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志.不可访问的日志: Security.在安装的“回滚”阶段发生异常.将忽略该异常并继续回 ...

    搭通自己的电脑与GitHub的传输通道

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

    判断ios是app第一次启动

    首次运行的应用程序加入一些help 或者 宣传动画 现在变的很重要了. 一个有用的例子是发送一个分析实例.这可能是一个很好的方法来确定有多少人下载实用应用程序.有人会说:“但是,嘿,苹果AppStor ...

    flask-appbuilder +echarts 展示数据笔记

    pip install flask-appbuilder fabmanager create-app cd newapp fabmanager create-admin fabmanager run ...

    Windows下Oracle创建数据库的3种方式

    1.   Creating a Database with DBCA DatabaseConfiguration Assistant (DBCA) is the preferred way to cr ...

    LeetCode - Boundary of Binary Tree

    Given a binary tree, return the values of its boundary in anti-clockwise direction starting from roo ...

    更多相关内容
  • C语言结构体变量

    2021-05-20 13:16:22
    结构体是一个或多个变量的集合,这些变量可以是不同的类型,为了处理的方便而将这些变量组织在一个名字之下。比如我要统某个班的学生信息(包括姓名,学号,成绩),每个学生都需要至少3个变量,如若学生人数较多,那...

    结构体是一个或多个变量的集合,这些变量可以是不同的类型,为了处理的方便而将这些变量组织在一个名字之下。比如我要统某个班的学生信息(包括姓名,学号,成绩),每个学生都需要至少3个变量,如若学生人数较多,那需要的变量就非常之多了。为了解决这样的问题,就要用到结构体这种构造类型,我们可以将每个学生的各项信息以不同类型的数据存放到一个结构体中,如用字符型表示姓名,用整型或字符型表示学号、用整型或实型表示成绩。

    b81248522902dedb1b8d417d7291f487.png

    结构体变量的定义

    结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息:

    struct student{int num;char name[20];int score;};struct为结构体关键字,student就是这结构体的类型名,而 num,name, score就是该结构体的成员,他们可以是不同类型的,注意在定义类型的时候不要对结构体成员num,name, score赋初值。其次就是在大括号后面要有分号“;”。

    定义结构体变量的方式

    定义变量的方式都是大同小异的,都为数据类型+变量名这样一种方式,比如int型,首先得有int这样一个数据类型,然后再用int这个数据类型去定义一个变量,同样的,我们要定义一个结构体变量,必须要有一个结构体类型,然后用这个类型去定义一个变量。结构体变量的定义有多种方式:

    方式一:先定义结构体类型再定义变量名

    67ce5c6fc2757c97bbd763b798fe7880.png

    其中struct是关键字,student是结构体标记(用于为结构体命名),struct student代表该结构体的类型, 大括弧里面就是结构体的成员。注意大括弧的后面一定要有一个分号‘;’。到此为止我们有了"struct student"这样的类型了,struct student就等价于我们的int一样,接下来我们就要定义一个这样类型的变量,定义格式如下:struct student zhangsan; 这个zhangsan就是我们所要的结构体变量。

    方式二:在声明类型的同时定义变量

    如:

    73ce08b516aa780b6c0d9ee6e1abd206.png

    这种方式定义结构体,后续可以根据需要定义新的变量,如struct student Wangwu。 注意:不能用Zhangsan去定义新的变量,这里Zhangsan、Lisi都为变量名而不是结构体类型。

    方式三:直接定义结构体类型变量

    934131e8cb16f3dbae3eef5ab269caf7.png

    这种定义方式中结构体变量只能在定义结构体类型的时候定义,不能再定义其他的变量。这样的定义的结构体类型是没有名字的,我们也可以用typedef重新为这样的结构体类型命,如:

    67f51f5a36c238a0e84e1cb5f75b107c.png

    使用typedef后,我们可以用Zhangsan作为数据类型来定义新的变量。需要注意的是,不能直接使用Zhangsan.num,因为Zhangsan不是变量,而是结构体类型。

    结构体变量的初始化:

    7e02093ac52a9a6f74710418865a1d11.png

    结构体变量的应用:

    结构体中的成员,可以像普通变量那样单独使用,如下面例子中,结构体变量A中的成员num,可以用A.num的方式来使用。

    结构体变量的成员引用:结构体变量名.成员名

    99345b0b983ae0a6767d29d91babc535.png

    关于结构体的一点说明:

    1、不能将结构体变量作为整体进行操作:printf("%d, %d\n", A);错误scanf("%d, %d\n”,&A); //错误printf("%d, %d\n”, A.num, A.score); //正确scanf("%d, %d\n”, &Lucy.num, &Lucy.sex); //正确2、当结构体变量的成员也是结构体类型时,引用必须用最底层的成员变量,如下

    f1d87f289cd12798e3ab5d66414980ca.png

    3、成员名可与程序中的变量名相同,二者代表不同对象

    ad31ad6ad3c15cad6b572dabb93404b4.png

    4、可以引用结构体变量成员的地址,也可以引用结构体变量的地址,例如:scanf("%d", &A.num); //输入A.num的值printf("%d", &A); //输出Bob的首地址目的:主要用作函数参数,传递结构体变量的地址。5、允许具有相同类型的结构变量可以相互赋值,其它情况不允许对结构变量直接赋值。

    0a83a6a05067230d5216940485b52d44.png

    就这么多吧,后续写写结构体数组,结构体指针,共用体,枚举,typedef,最后说一下结构体内存分配相关方面的内容。

    a64636d431e20731bd8c6d6428ad61e5.png

    举报/反馈

    展开全文
  • C语言结构体变量创建以及赋值的三种方式
    #include<stdio.h>
    #include<string.h>
    
    struct Student{
        //c语言是没有字符串类型的,只能通过字符指针来实现,且必须要制定长度大小
        char name[100];
        int age;
        int score;
    }s3;
    
    /*初始化结构体的三种方式*/
    int main(){
        //方式一: 先定义结构体变量,再逐一赋值结构体属性
        struct Student s1;
        // s1.name = "小明"; 不能直接赋值操作
        strcpy(s1.name, "小明");
        s1.age = 18;
        s1.score = 100;
        printf("姓名: %s  年龄: %d  分数: %d\n",s1.name, s1.age, s1.score);
    
        //方式二:定义好结构体变量的同时进行属性赋值
        struct Student s2 = {"小红", 20, 80};
        printf("姓名: %s  年龄: %d  分数: %d\n",s2.name, s2.age, s2.score);
        
        //方式三: 在定义结构体的同时创建变量,然后再逐一赋值结构体属性
        strcpy(s3.name, "小花");
        s3.age = 19;
        s3.score = 90;
        printf("姓名: %s  年龄: %d  分数: %d\n",s3.name, s3.age, s3.score);
    
    }
    
    展开全文
  • C语言结构体变量——struct

    千次阅读 2022-01-29 10:37:27
    当我们有大量且类型不同的数据需要描述的时候,如果针对每个数据都去定义一个变量或数组,是很消耗时间和内存的,那么如何跟方便的存储大量不同类型的数据呢,这就需要用到结构体变量结构体变量——struct是一种...

    当我们有大量且类型不同的数据需要描述的时候,如果针对每个数据都去定义一个变量或数组,是很消耗时间和内存的,那么如何跟方便的存储大量不同类型的数据呢,这就需要用到结构体变量了

    结构体变量——struct是一种构造类型

    构造类型:不是基本类型的数据结构也不是指针,它是由若干个相同或不同类型的数据构成的集合。

    结构体概念:结构体是一种构造类型的数据结构,是一种或多种基本类型或构造类型的数据的集合

    1.结构体类型的定义

    结构体类型的定义方法:在使用结构体之前必须先有类型,然后用类型定义数据结构,这个类型相当于一个模具

    定义结构体类型的方式如下:

    struct 结构体类型名

    {

        成员列表

    };

     2.定义结构体变量

     如果我们要定义结构体变量,可以在分号前面定义,下面举个详细的例子

     假如我们要记录三名学生的年龄,姓名和性别,我们可以这样定义结构体类型和结构体变量

    有了结构体类型之后,就可以用类型定义变量了

    一般结构体类型都会定义在全局,也就是main函数的外面,所以在定义结构体类型的同时定义变量,这些变量一般都是全局变量,定义完类型之后定义的结构体变量内存分配要看定义的位置

    struct stu ;
    {   //定义了三个struct stu类型的变量
        //每个变量都有三个成员,分别是num,name,sex
        int num;
        char name[20];  
        char sex;
    } lucy,bob,lilie; //结构体变量,分别是lucy,bob,lilie
    

    在定义结构体类型的时候顺便定义结构体变量,以后还可以定义结构体变量struct结构体类型名

    struct结构体类型名

    {

        成员列表;

    }结构体变量1,变量2;

    struct结构体类型名 变量3,变量4;
     

    注意:一般结构体类型都会定义在全局,也就是main函数的外部,所以在定义结构体类型的同时定义变量,这些变量一般都是全局变量,

    定义完类型之后定义的结构体变量内存分配要看定义的位置

     3.无名结构体类型的定义和typedef定义

    在定义结构体类型的时候,没有结构体类型名,我们可以顺便定义结构体变量,但是
    因为没有类型名,所以之后就不能再定义相关类型的数据了

    struct

    {

        成员列表;

    }变量1,变量2;

    使用typedef给结构体变量取别名

    通常将一个结构体类型重新起个类型名,用新的类型名替代原先的类型

    typedef struct 结构体名      //这里的结构体名是可以省略的

    {

       成员列表;

    }重新定义的结构体类型名;

    注意:typedef主要用于给一个类型取别名,此时相当于给当前结构体重新起来一个类型名,相当于struct结构体名

    4.结构体变量的初始化及使用

    结构体变量的定义初始化及使用

    1.结构体变量的定义和初始化

    2.在定义结构体变量之前首先得有结构体类型,然后在定义变量

    3.在定义结构体变量的时候,可以顺便给结构体变量赋初值,被称为结构体的初始化

    4.结构体变量初始化的时候,各个成员按顺序初始化

    struct stu
    {
        int id;
        char name[20];
        char sex;
        char age;
    }zhangsan,lisi = {1002,“李四”,’B’,25};
    int main()
    {
        struct stu wangwu;
        //结构体变量的初始化
        struct stu zhaoliu = {1001,“赵六”,‘B’,20};
        return 0;
    }
    

     使用typedef对结构体成员取别名并初始化

    使用typedef对结构体变量取别名
    typedef struct
    {
        int a;
        int b;
        char c;
    }MSG;  //使用了typedef就不能同时定义结构体变量了
    int main()
    {
          MSG message1,message2 = {100,200,’a’};
         //使用了typedef在定义结构体变量的时候不用加struct
    }
    

     结构体变量的使用

    结构体变量对成员调用的方法:

    结构体变量.结构体成员  注意中间是一个.操作符

    struct stu
    {
        int id;
        char name[20];
        char sex;
        char age;
    }zhangsan,lisi = {1002,“李四”,’B’,25}
    int main()
    {
        struct stu wangwu;
        struct stu zhaoliu = {1001,“赵六”,‘B’,20};
        //结构体变量的使用
        zhangsan.id = 1001;
        strcpy(zhangsan.name,”zhangsan”);//这里不能直接进行赋值
        zhangsan.sex = ‘B’;
        zhangsan.age = 18;
    
        printf(“%d-%s-%c-%d\n”,zhangsan.id,zhangsan.name,zhangsan.sex,zhangsan.age);
        //使用“.”操作符访问对结构体成员进行访问
        printf(“%d-%s-%c-%d\n”,lisi.id,lisi.name,lisi.sex,lisi.age);
    
        return 0;
    }
    

    5.在结构体中嵌套结构体

    typedef struct
    {
        int year;
        int month;
        int birthday;
    }BD;
    typedef struct
    {
       int id;
       char name[32];
       BD birthday;
    }stu;
    int main()
    {
        stu xiaomin;
        xiaoming.id = 1001;
        strcpy(xiaomign.name = “小明”);
        //如果要对嵌套的结构体赋值,就要找到最内层的成员再赋值
        xiaoming.birthday.year = 2002;
        xiaoming.birthday.month = 12;
        xiaoming.birthday.day = 20;
        printf(“%d-%s-%d:%d:5d\n”,xiaoming.id,xiaoming.name,\
        xiaoming.birthday.year,xiaoming.birthday.month,\  xiaomiang.birthday.day);
        //嵌套结构体的定义并初始化
        stu xiaoli = {1002,”xiaoli”,2000,1,1};
    }
    

    6.相同类型的结构体变量可以相互赋值的

    注意:必须是相同类型的结构体变量,才能相互赋值
    struct stu
    {
        int id;
        char name[32];
        char sex;
        int age;
    };
    int main()
    {
         struct stu zhangsan;
         zhangsan.id = 1001;
         strcpy(zhangsan.name,”zhangsan”);//这里不能直接进行赋值
         zhangsan.sex = ‘B’;
         zhangsan.age = 18;
         struct stu lisi;
         lisi = zhangsan;
        return 0;
    }
    

    写到这里,相必大家也对结构体有了初步的了解

    除了有这种简单的结构体,后面我还会讲到结构体数组、结构体指针等比较复杂的东西

    大家一起加油啊,如果有讲的不好的地方,请大家指正

     

    展开全文
  • 文章目录前言一、结构体成员:二、结构体变量的定义,初始化:总结 前言 ----结构体概述: 结构体就是将很多不同类型的数据包含在一起。 比如里面包含学生姓名、年龄、成绩:char name[20] ; int age ; double score...
  • C语言结构体变量课件.pdf
  • 以下给出了一个例子,实现了结构体变量的定义,初始化,作为函数形参调用。 代码: #include <stdio.h> struct Day // 定义一个结构体Day { char Data[100]; char Weather[100]; char Mood[100]; }; void ...
  • C语言结构体变量课件[整理].pdf
  • C语言结构体变量 指针以及对结构体成员的访问

    千次阅读 多人点赞 2019-10-12 12:21:26
    文章目录结构体结构体变量访问成员的方法结构体指针变量访问成员的方法 结构体 struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month; u8 day; ...1)C语言中,在相同类型的变量间赋值时是直接内存复制的;...2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • C语言结构体结构体变量

    千次阅读 2021-05-20 07:55:45
    一、结构体类型的定义结构体是一种新数据类型,属构造类型,它由若干类型各异的“成员”组成;描述这些“成员”可以使用任何基本数据类型,甚至是另外一种构造数据类型都行。其实,从本书开篇,就在定义变量,下边的...
  • C语言结构体学习总结

    2020-08-03 18:32:05
    该文章讲述了C语言结构体学习.
  • 一、结构体变量 1、结构体概念 将不同类型的数据组合成一个有机的整体即为结构体。结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型。 2、结构体类型及结构体变量定义 (1)结构体类型声明 struct ...
  • 结构体变量赋值
  • C语言结构体变量作为函数形参

    千次阅读 2019-09-29 16:21:20
    *C语言结构体变量作为函数形参* | 例子1 #include<stdio.h> #include<stdbool.h> typedef struct { int a; double b; bool flag; }User; User f(User user) { ...
  • 则语句 printf%d,sizeof(structs) 的输出结果为 A)3 B)7 C)6 D)4 2当定义一个结构体变量时系统为它分配的内存空间是 A结构中一个成员所需的内存容量 B结构中第一个成员所需的内存容量 C结构体中占内存容量最大者所...
  • C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数 结构体引例结构体变量的定义结构体变量的使用结构体变量作为函数参数结构体变量的初始化 下一篇文章 结构体 引例 输出平均...
  • 则语句 printf%d,sizeof(struct s) 的输出结果为 A) 3 B) 7 C) 6 D) 4 2当定义一个结构体变量时系统为它分配的内存空间是 A结构中一个成员所需的内存容量 B结构中第一个成员所需的内存容量 C结构体中占内存容量最大...
  • C语言 | 结构体变量

    2021-04-29 08:41:58
    C语言结构体类型 C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。在其他一些高级语言中称“记录”。 一般形式 struct 结构体名 {成员表列}; 结构体类型的名字是由一个关键字struct...
  • 结构体变量作为函数参数,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变量的本身 结构体指针...
  • 2、结构体的目的是为了描述一个对象,为了把一个对象描述清除必须要所出这个对象的很多属性,而为了表示这些属性就要用到不同的变量,而且变量不止一个。 二、如何来定义结构体: 1、定义结构体 格式: struct 结构体...
  • C语言结构体变量私有化详解背景介绍操作系统 : CentOS7.3.1611_x64gcc版本 :4.8.5什么是结构体?在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以...
  • 结构体是一种数据类型(像int、char、flaot是数据类型一样),可以用它定义变量。用结构体类型定义变量的方式有三种:一、先定义结构体类型,再定义变量一般形式:struct 结构体名{类型标识符 成员名;类型标识符 成员...
  • C语言-结构体变量的引用

    千次阅读 2021-11-12 23:17:14
    例:有如下结构体 //声明一个结构体类型Student struct Student { ...(1)将一个结构体变量的值赋给另一个具有相同街头的结构体变量。student1=student2; (2)引用一个结构体变量中的一个成员的值。例如:stud
  • 则语句 printf%d,sizeof(struct s) 的输出结果为 A)3 B)7 C)6 D) 4 2当定义一个结构体变量时系统为它分配的内存空间是 A结构中一个成员所需的内存容量 B结构中第一个成员所需的内存容量 C结构体中占内存容量最大者...
  • C语言-结构体变量值比较

    千次阅读 2021-08-31 09:39:47
    然后根据书上的代码去写发现程序运行不起来,真的是过五关斩六将啊,遇到一个问题解决一个问题,今天解决的问题是在用C语言在顺序表中定位的方法内有关于结构体变量值进行比较的代码,程序就卡到了这里,然后通过...
  • 本文是关于结构体变量的复制与比较。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,696
精华内容 44,678
关键字:

c语言结构体变量