精华内容
下载资源
问答
  • C语言给结构体指针赋值.doc
  • 如图所示,我应该怎样正确输出打印结构体指针对应的字符串数据呢??
  • 结构体指针赋值

    万次阅读 2017-02-17 15:10:02
    //方法1:可以p分配一段内存空间,并使其指向此空间: #include main() { struct abc{ int a;}; struct abc *p; p=(struct abc *)malloc(sizeof(struct abc));p->a = 1; printf("%d\n",p->a); } //...

    //方法1:可以给p分配一段内存空间,并使其指向此空间:

    #include<stdio.h>

    main()
    {
    struct abc{
    int a;};
    struct abc *p;

    p=(struct abc *)malloc(sizeof(struct abc));
    p->a = 1;
    printf("%d\n",p->a);
    }
     
    

    //方法2:可以让p指向一个已存在的内存空间:

    #include<stdio.h>

    main()
    {
    struct abc{
    int a;};
    struct abc *p;

    struct abc temp;
    p=&temp;
    p->a = 1;
    printf("%d\n",p->a);
    }

    展开全文
  • 空指针与结构体指针赋值操作

    千次阅读 2020-04-24 16:33:51
    } 2、输出结果: 3、结论: 1、空指针可以被/任何类型的指针赋值指针赋值的实质是传递地址。 2、同类型的结构体指针可以直接赋值也可以通过空指针作为中转。 3、不同类型的结构体指针可以通过空指针的中转赋值...

    1、测试代码:

    #include<stdio.h>
    #include<string.h>
    struct DATA
    {
    	int year;
    	int month;
    	int day;
    };
    struct TEST
    {
    	int a;
    	char b;
    };
    int main(void)
    {
    	struct DATA data1;
    	void *p;
    	data1.year = 2020;
    	data1.month = 4;
    	data1.day = 2;
    	p = &data1;
    	struct DATA *data2;
    	data2 = p ;
    	printf("data2 : year =%d, month =%d, day =%d\r\n ",data2->year,data2->month,data2->day);
    	data2->day = 5;
    	printf("data2 : year =%d, month =%d, day =%d\r\n ",data2->year,data2->month,data2->day);
    	printf("data1 : year =%d, month =%d, day =%d\r\n ",data1.year,data1.month,data1.day);
    
    
    	struct TEST *test;
    	test = p ;
    	printf("test : a =%d, b=%d\r\n",test->a,test->b);
    	printf("test : a =%d, b=%d\r\n",test->a,*(test+1));
    	printf("test : a =%d, b=%d c=%d\r\n",test->a,*(test+1),*(test+2));
    	return 0 ;
    }
    

    2、输出结果:
    在这里插入图片描述
    3、结论:
    1、空指针可以被/给任何类型的指针赋值,指针赋值的实质是传递地址。
    2、同类型的结构体指针可以直接赋值也可以通过空指针作为中转。
    3、不同类型的结构体指针可以通过空指针的中转赋值,如果不同结构体的成员的类型和数量相同还好,如果不同,虽然能够编译过,但得到的值需谨慎对待。

    展开全文
  • //wings20200306:结构体中内嵌自身,这个地方没表达清楚,且意义何在?先上冷菜:复习结构体样式type A:多年工作经验告诉我这种方法最为标准实用,墙裂推荐typedef struct Student{int a;}Stu;使用方法:Stu exam;...

    //wings20200306:

    结构体中内嵌自身,这个地方没表达清楚,且意义何在?

    先上冷菜:复习结构体样式

    type A:

    多年工作经验告诉我这种方法最为标准实用,墙裂推荐

    typedef struct Student

    {

    int a;

    }Stu;

    使用方法:

    Stu exam;

    type B:

    省略了struct后面的内容

    typedef struct

    {

    int a;

    }Stu;

    使用方法:

    Stu exam;

    type C:

    省略了最后分号前的定义

    typedef struct stu

    {

    int a;

    };

    使用方法:

    struct Student exam;

    注意:这种方法编译器可能会警告,但是能够运行且正常读取数据不发生段错误。

    184684340_1_20200306040939284

    type D:不使用typedef的情况

    typedef可以自定义化名称,不使用它相当于直接操作原生的结构体。

    1.将typeA中的typedef去掉,此时Stu已经没意义了,注意不可以使用struct Stu exam

    struct Student

    {

    int a;

    }Stu;

    使用方法:

    struct Student exam;

    2.将typeB中的typedef去掉

    这是直接创建结构体变量的形式,只能使用一次,显然在实战中基本没有什么用处。

    struct

    {

    int a;

    }Stu;

    3.将typeC中的typedef去掉

    百度百科收录了这种写法,也是比较标准的,但是本人不推荐使用

    typedef struct stu

    {

    int a;

    };

    使用方法:

    struct Student exam;

    冷菜总结:实际应用上使用TYPE A的场景极其繁多,真心只记住它就行。

    热菜来了:

    A结构体指针

    定义:

    拿最经典的TYPE A,在分号前面增加了指针

    typedef struct Student

    {

    int a;

    }Stu,*pStu;

    使用方法:

    pStu exam1;

    Stu exam2;

    exam1 = exam2;

    exam2.a = 1;

    printf("%d",exam1->a);//输出为1

    也可以不改变TYPE A

    使用方法:

    Stu *exam1;

    Stu exam2;

    exam1 = exam2;

    exam2.a = 1;

    printf("%d",exam1->a);//输出为1

    结构体数组的指针使用

    Stu exam[4];

    pStu p;

    p = exam;

    p +=2;//等价于p = exam[1]

    多维结构体

    参考结构体数组的使用,区别在于之前+1就指向下一个结构体成员。这里的+1理论上就是结构体单位大小所占内存空间的偏移。

    复杂式结构体TYPE I:内有函数指针

    继续拿最经典的TYPE A,加入函数指针

    typedef struct Student

    {

    int a;

    void (*fun)(int a);

    }Stu;

    使用之前先定义一个引用的函数

    void foo(int i){

    printf("%d",i);

    }

    Stu exam;

    exam.fun = foo;//

    exam.fun(1);//调用引用的函数,输出1

    这个函数指针有点low,来个再复杂的,其实就是指针方面的知识了,还是挺有用的,直接贴图

    184684340_2_20200306040939628

    复杂式结构体TYPE II:内部竟有本身

    就是这么神奇,继续拿最经典的TYPE A,加入本身

    typedef struct Student

    {

    int a;

    struct Student *stu_exam;

    }Stu;

    用法:

    Stu exam;

    Stu child;

    child.a = 1;

    exam.stu_exam=child;//exam内的“本身”是结构体child

    那么怎么读取child中的a元素值?

    exam.stu_exam.a?

    显然不对,正确的做法是需要一个Stu类型的容器来装child,这是抽象的,实体实现就是定义一个Stu指针指向child

    Stu *p;

    p = exam.stu_exam;//注意这里使用了=,如果stu_exam是指针类型的,应该p = &exam.stu_exam;

    printf("%d",p->a);//输出a,大功告成

    复杂式结构体TYPE III:以“.”开头

    static struct file_operations hello_flops = {

    .owner = THIS_MODULE,

    .open = hello_open,

    .write = hello_write,

    };

    这是结构体初始化的一种方式,.的功能还是访问参数。

    按照通用的方法,可以写成这样

    static struct file_operations hello_flops;

    hello_flops.owner = THIS_MODULE;

    hello_flops.open = hello_open;

    hello_flops.write = hello_write;

    这种样式可以说把2步缩成一步了,省事并且更直观。

    这个声明采用了标记化结构初始化语法。这种写法是值得采用的,因为它使驱动程序在结构的定义发生变化时更具有可移植性,并且使代码更加紧凑且易读。标记化的初始化方法允许对结构成员进行重新排列。在某些场合下,将频繁被访问的成员放在相同的硬件缓存行上,将大大提高性能。

    复杂式结构体TYPE V:缺省赋值结构体成员

    struct button_desc {

    int gpio;

    int number;

    char *name;

    struct timer_list timer;

    };

    static struct button_desc buttons[] = {

    { S5PV210_GPH2(0), 0, "KEY0" },

    { S5PV210_GPH2(1), 1, "KEY1" },

    { S5PV210_GPH2(2), 2, "KEY2" },

    { S5PV210_GPH2(3), 3, "KEY3" },

    { S5PV210_GPH3(0), 4, "KEY4" },

    { S5PV210_GPH3(1), 5, "KEY5" },

    { S5PV210_GPH3(2), 6, "KEY6" },

    { S5PV210_GPH3(3), 7, "KEY7" },

    };

    首先定义了button_desc的结构体类型,然后申请了buttons结构体组,在进行赋值的时候发现内容不够完整,{}内是3个变量,原定义是4个。结果一样是可以使用的,指针不越界,因为系统已经申请了内存,只不过timer部分的内存都是空的。

    未完待续

    展开全文
  • 今天梳理下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即可获取成员变量)。
     
    

    展开全文
  • 数组定义: char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER_HEAD_S) + 4] = {0};...结构体定义: typedef struct { int iOne; int iTwo; int iThr; }TRANS_HEAD_S; typedef struct { int iUser; }USER...
  • 话说,今天遇到这么一个问题。...所以,我想请教大虾们一下,结构体指针赋值的时候赋值的什么,是地址吗?是不是像int* 赋 int* 一样? 还有,再temp = mru后,能够delete temp吗?delete的是哪个空间?
  • 仔细看看是不是你的结构体忘记写 这样居然就不会报错了………… 有大神明白这到底是为什么吗?
  • struct A里的成员是结构体指针而b_arry和c_arry是结构体数组的地址。 2. 结构体经过以下传递会不会造成数据的混乱? 比如有一个函数void func (void *arg); 往函数里面传参,如func (&a); (a按照问题1里进行了...
  • 目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。 我们在使用链表时,有时候会包含指向其他结构体的指针 比如说 typedef struct A { uint8_t a1; uint8_t a2...
  • 指针没初始化
  • C++ 结构体指针与结构体数组的赋值

    千次阅读 2019-07-18 22:15:39
    对于结构体指针,可以用来指向结构体数组的首地址,但是不能按照结构体数组的赋值方式进行赋值,感觉是无法预知后面批量赋值的大小。具体情况见以下代码: #include <iostream> using namespace std; ...
  • 结构体中的结构体指针是使用一、问题背景二、代码三、说明 一、问题背景   日常工作中没有编程的机会,所以只看得懂代码,现在需要重新写一段代码,实现固定格式存储数据,需要使用到结构体和结构体指针。数据...
  • 1、关于结构体定义 ...5、结构体指针内存赋值 6、检查是否成功赋值 #define _CRT_SECURE_NO_WARNING #include<iostream> #include<string.h> using namespace std; //定义一个结构体 struct Word {...
  • 我定义了一个结构体,定义了一个结构体指针指针分配空间之后,对其初始化,系统会报错, > 0x00B81B70 处(位于 DataStructure.exe 中)引发的异常: 0xC0000005: 写入位置 0xCDCDCDD1 时发生访问冲突。 ...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...
  • #include <stdio.h> #include <string.h> #define format "%d\n%s\n%f\n%f\n%f\n" struct book ... /*这里的结果反调用main函数中出的赋值*/ printf("The book \" %s\" has \n", p->bookn
  • C语言中结构体直接赋值

    万次阅读 多人点赞 2018-10-21 10:47:29
    FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以...简单结构体(不包含指针成员)直接赋值没有问题。 我们先下面一段代码: 1 2 3 4 5 6 7 8 ...
  • 为此,C提供了结构体变量提高表示数据的能力,它能让你创造新的形式。 1、结构体的定义 struct book { char title[40]; //书名 char author[40]; //作者 float price; //单价 }; 在结构体声明中,用一对...
  • c语言定义结构体可以直接声明结构体变量的,如下 struct Student{ char *name; int age; }xiaoming 这样以来,我们就定义了一个结构体类型,同时声明了一个结构体变量xiaoming。那么。我们在main函数中怎样对...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include#includeint grad,clas;struct stu_{char name[11];char sex;int num;float score[3];float ave;}; void input(struct stu_ *p){int j;printf("请输入姓名:");...
  • #include <...struct Student //声明结构体类型Student { int num; char name[20]; char sex; int age; }; //下面将数据赋值 struct Student stu[5] = { {10101, "Zhou ping", 'M', 15}, //定

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,474
精华内容 35,789
关键字:

如何给结构体指针赋值