精华内容
下载资源
问答
  • 今天梳理下golang中结构体赋值指针以及获取成员变量方式

    一 实例

    func main(){
        type Person struct {
            name  string
            age int
        }
        p1 := &Person{name: "wbw", age: 18}
        fmt.Println((*p1).name)
        fmt.Println(p1.name) //隐式解引用
    
        p2 := Person{name: "wbw", age: 18}
        fmt.Println(p2.name)
    
        p3 := p1
        fmt.Println(p3.name)
        p4 := p2
        fmt.Println(p4.name)
    
        p3.name = "sdfsd"
        fmt.Println((*p1).name)
        fmt.Println(p1.name)
        fmt.Println(p3.name)
    
        p4.name = "sdfsdss"
        fmt.Println(p2.name)
        fmt.Println(p4.name)
    
    
    }

    二 总结

    • 当结构体原型(p1)获取的是结构体指针,那么当它给另一个成员赋值(p3)时,p3的改动会导致p1同时改动。就是说此时p1, p3共同指向一个结构体地址
    • 当结构体原型(p2)获取的只是普通结构体时,那么当它给另一个成员赋值(p4)时,p4的改动不会导致p2的改动。就是说此时p2,p4不是指向同一个结构体地址
    • 当结构体原型(p1)获取的是结构体指针,那么它可以用指针获取成员变量((*p1).name),也可以使用隐式解引用(p1.name即可获取成员变量)。
     
    

    展开全文
  • 指针没初始化

    指针没初始化

    展开全文
  • #include <...struct Student //声明结构体类型Student { int num; char name[20]; char sex; int age; }; //下面将数据赋值 struct Student stu[5] = { {10101, "Zhou ping", 'M', 15}, //定

    C语言给结构体赋数据值

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct Student //声明结构体类型Student
    {
        int num;
        char name[20];
        char sex;
        int age;
    };
    
    //下面给结构体赋数据值
    struct Student stu[5] =
        {
            {10101, "Zhou ping", 'M', 15}, //定义结构体数组并初始化
            {10102, "Zhang ping", 'M', 15},
            {10103, "Liou fang", 'F', 16},
            {10104, "Cheng ling", 'F', 17},
            {10105, "Wang ming", 'M', 15}};
    
    int main()
    {
        struct Student *ps; //定义指向struct Student结构体类型数据的指针变量
        printf("No\tName\t\t\tSex\tage\t\n");
        for (ps = stu; ps < stu + 5; ps++)
            printf("%d\t%s\t\t%c\t%d\t\n", ps->num, ps->name, ps->sex, ps->age);
        return 0;
    }
    

    执行结果:

    No	Name			Sex	age
    10101	Zhou ping		M	15
    10102	Zhang ping		M	15
    10103	Liou fang		F	16
    10104	Cheng ling		F	17
    10105	Wang ming		M	15
    [Thread 5812.0x69b0 exited with code 0]
    [Inferior 1 (process 5812) exited normally]
    

    C语言结构体指针变量作函数参数

    #include <stdio.h>
    struct stu
    {
        int num;
        char *name;
        char sex;
        float score;
    } boy[5] = {
        {101, "Li ping", 'M', 45},
        {102, "Zhang ping", 'M', 62.5},
        {103, "He fang", 'F', 92.5},
        {104, "Cheng ling", 'F', 87},
        {105, "Wang ming", 'M', 58}};
    
    void Fve(struct stu *ps)
    {
        int c = 0, i;
        float ve, s = 0;
        for (i = 0; i < 5; i++, ps++)
        {
            s += ps->score;
            if (ps->score < 60)
                c += 1;
        }
        printf("s=%f\n", s);
        ve = s / 5;
        printf("average=%f\ncount=%d\n", ve, c);
    }
    
    main()
    {
        struct stu *ps;
        void Fve(struct stu * ps);
        ps = boy;
        Fve(ps); 
    }
    

    执行结果:

    s=345.000000
    average=69.000000
    count=2
    [Thread 30236.0xa0b0 exited with code 26]
    [Inferior 1 (process 30236) exited with code 032]
    
    展开全文
  • 目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。 我们在使用链表时,有时候会包含指向其他结构体的指针 比如说 typedef struct A { uint8_t a1; uint8_t a2...

    目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。
    我们在使用链表时,有时候会包含指向其他结构体的指针
    比如说

    typedef struct A
    {
    	uint8_t a1;
    	uint8_t a2;
    	uint8_t *a3;
    }a
    typedef struct B
    {
    	struct B *b1;
    	a* b2;
    	uint8_t b3;
    }b
    

    注意,对于指针来说就是占4个字节。如果定义的是指针类型,如下面的s1,s2所示,赋值时我们必须先要进行空间分配,不然是无法进行赋值的。

    a* s1;
    b* s2;
    

    假设我们要对s1,s2指针内容进行赋值。

    s1 = (a*)malloc(sizeof(a));
    s1->a1 = 10;
    

    而对于s2指针的赋值

    uint8_t array1[5] = {1,2,3,4,5};
    uint8_t array2[5] = {0};
    s2 = (b*)malloc(sizeof(b));//只是先对结构体B进行空间分配,包含的指针变量占4个字节,还没有具体的地址分配,需要进行进一步申请
    s2->b2 = (a*)malloc(sizeof(a);
    s2->b2->a1 = 10;
    s2->b2->a3 = (uint8_t *)array1;
    array2[0] = *s2->b2->a3;
    array2[1] = *(s2->b2->a3 + 1);
    array2[2] = *(s2->b2->a3 + 2);
    array2[3] = *(s2->b2->a3 + 3);
    array2[4] = *(s2->b2->a3 + 4);
    

    假设设的是结构体类型,就不需要进行空间的分配

    a s1;
    b s2;
    

    可以直接进行赋值,但对于包含的指针变量还是得先申请空间。

    s1.a1 = 10;
    s2.b2 = (a*)malloc(sizeof(a);
    s2.b2->a1 = 10;
    

    数组使用符号.,指针使用符号->
    总结下来就是
    当我们需要对指针进行赋值操作时,也就是说不是指针间的赋值时,我们需要先申请变量空间,对于嵌套的指针变量,都需要进行空间申请,才能对其中的内容进行赋值。

    展开全文
  • 由于经常要在函数中对结构体对象进行操作,所以函数形参中常常都是传值一个结构体指针变量,自己有时为了偷懒,干脆在定义对象时直接定义结构体指针变量,这样实参就不用取地址了。 这样想是没有错,但是结构体指针...
  • 结构体指针变量与结构体形参的关系一、结构体指针变量的声明二、结构体指针做形参三、如何通过形参更改主函数里的结构体变量的数据 一、结构体指针变量的声明 声明结构体时,我们首先需要声明一个结构体,然后用...
  • 我的理解: 1,如果定义一个结构体指针变量,就一定要为这个结构体指针变量赋值一个有效的地址,否则因为结构体指针变量地址不明确,那之后得到的结构体成员值也不明确。 2,定义结构体变量而不是指针不会出现问题...
  • 1、关于结构体定义 ...5、结构体指针内存赋值 6、检查是否成功赋值 #define _CRT_SECURE_NO_WARNING #include<iostream> #include<string.h> using namespace std; //定义一个结构体 struct Word {...
  • 结构体指针赋值

    万次阅读 2017-02-17 15:10:02
    //方法1:可以给p分配一段内存空间,并使其指向此空间: #include main() { struct abc{ int a;}; struct abc *p; p=(struct abc *)malloc(sizeof(struct abc)...//方法2:可以让p指向一个已存在的内存空间:#i
  • C结构体指针变量

    2020-02-09 15:53:51
    结构体指针变量 指针变量指向一个结构体变量,那么就叫做结构体指针变量。下面是其基本用法: struct stu{ ...... }; struct stu stud; //定义结构体变量 struct stu *pstud=&stud; //指针变量指向结构体变量 ...
  • C++ ->(结构体指针变量)

    千次阅读 2019-03-27 19:56:34
    一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。...这里注意的是结构体指针变量需要先赋值之后才可以去使用。 如果key是先被声明是结构体类型的...
  • //结构体指针 Control_Para *My_Control_Para1 = &My_Control_Para; BuiltIn_Para *My_BuiltIn_Para1 = &My_BuiltIn_Para; for(temp_Count111 = 1,temp_Count222 = 1;temp_Count111 ;temp_Count111++)//My_...
  • 空指针与结构体指针赋值操作

    千次阅读 2020-04-24 16:33:51
    1、测试代码: #include #include struct DATA { int year;... 3、不同类型的结构体指针可以通过空指针的中转赋值,如果不同结构体的成员的类型和数量相同还好,如果不同,虽然能够编译过,但得到的值需谨慎对待。
  • 结构体变量赋值给同类型的结构体变量     备注:程序遗漏返回值(可以正常编译),代码最后需要加return 0;。...
  • c语言定义结构体可以直接声明结构体变量的,如下 struct Student{ char *name; int age; }xiaoming 这样以来,我们就定义了一个结构体类型,同时声明了一个结构体变量xiaoming。那么。我们在main函数中怎样对...
  • 版权声明:本文为博主原创文章,对文章内容有任何意见或建议,欢迎与... https://blog.csdn.net/zhouzxi/article/details/51892960问题描述 某结构体的定义如下:typedef struct { int iAge; // 年龄 char szAd...
  • 结构体内指针变量赋值

    千次阅读 2018-12-12 20:02:27
    问题描述  某结构体的定义如下: typedef struct {  int iAge; // 年龄  char szAddr1[100]; // 地址1  char *pszAddr2; // 地址2  char **pszAddr3; // 地址3 } T_Pe...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month; u8 day; ...1)C语言中,在相同类型的变量赋值时是直接内存复制的;...2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • 近期在学习数据结构的单链表问题时,涉及到了结构体定义,结构体使用以及定义结构体指针变量的问题不是很清楚,现在对关于结构体指针变量的使用做下记录 结构体指针变量的定义方式: struct 结构体类型名称 *...
  • 关于指针结构体函数中指针变量赋值&的问题思路今天做到了结构体函数,需要用指针进行解决,之前一直搞不清一个问题,就是给指针赋值的时候赋值变量什么时候用&,什么时候不用。今天搞明白了,下面上图第一种情况:...
  • C语言 变量、数组、结构体中的赋值

    千次阅读 2019-05-16 10:52:04
    C语言指针-赋值篇问题来源变量赋值数组赋值结构体赋值 今天主要就是一个 关于 C语言变量、数组、结构体等 赋值的一篇文章 问题来源 今天有个同学问了我一个问题? ![定义了一个结构体]...
  • 这个问题是我在2020年刚开始学数据结构链表那一章遇到的,当时应该也没完全理解透彻,然后最近又遇到了,重新...2.再是指针的问题,指针是一种c自带的数据类型,指针自己的空间在定义指针变量的时候就会分配(如:int
  •  近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉。对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式。例如以下的代码演示样例: 如上代码所看到的,...
  • 一个结构体变量的指针就是该...声明一个结构体变量,无论是否初始化,都开辟内存,声明一个结构体指针变量,对其初始化的时候才会开辟内存。 A a[3]; a是A型的,有3个,当然分配A乘3大小的空间 A* a; a是A*型
  • 单个结构体是不能写成“指针名 = 结构体变量名”; 结构体数组却可以写成“指针名 = 结构体变量名” 。   观点1论证:单个结构体是不能写成“指针名 = 结构体变量名”的, 例如 pstu = stu1 是错误的,必须写成 ...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...
  • 意思是指针也是变量,通过赋值,可以让FirstCell也指向S->Next节点,跟需不需要申请内存无关。 //黑皮书的原文: 指针也是变量可以在程序中可以直接使用而不必通过间接引用的方法使用 // 例如,如果iq是另一个指向...
  • 怎样对结构体变量成员赋值; 怎样通过指向结构体变量指针访问结构体变量中成员。 #include <stdio.h> #include <string.h> struct Student{ long int num; char name[15]; char sex; float score;...
  • typedef struct student { u8 num; u8 *p; }STU; STU st1; u8 bufdata[20]; void init_stu(STU *st) { st->num = 10; st->p[0] = 12; st->p[1] = 13; } int main(void) { ... pri...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,298
精华内容 28,119
关键字:

结构体指针变量赋值