精华内容
下载资源
问答
  • C语言结构体指针赋值

    千次阅读 2021-05-21 07:53:44
    C语言结构体指针赋值》由会员分享,可在线阅读,更多相关《C语言结构体指针赋值(6页珍藏版)》请在人人文库网上搜索。1、指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。...

    《C语言给结构体指针赋值》由会员分享,可在线阅读,更多相关《C语言给结构体指针赋值(6页珍藏版)》请在人人文库网上搜索。

    1、指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子:r是一个指向结构体的指针。请注意,因为r是一个指针,所以像其他指针一样占用4个字节的内存。而malloc语句会从堆上分配45字节的内存。*r是一个结构体,像任何其他Rec类型的结构体一样。下面的代码显示了这个指针变量的典型用法:您可以像对待一个普通结构体变量那样对待*r,但在遇到C的操作符优先级问题时要小心。如果去掉*r两边的括号则代码将无法编译,因为“.”操作符的优先级高于“*”操作符。使用结构体指针时不断地输入括号是令人厌烦的,为此C语言引入了一种简记法达到相同的目的。

    2、:r-这种写法和(*r).是完全等效的,但是省去了两个字符。指向数组的指针还可以创建指向数组的指针,如下所示:或:可见要创建指向整数数组的指针,只需创建一个普通的整数指针即可。调用malloc分配合适的数组空间,然后将指针指向数组的第一个元素。访问数组元素既可以用普通的数组下标也可以用指针运算。C将两种方法视为是等效的。指向数组的指针这一技巧尤其适用于字符串。您可以为某个特定大小的字符串分配刚好合适的内存。指针数组有时声明一 个指针数组可以节省大量内存,或者使得某些内存消耗较大的问题得以解决。下面例子中的代码,声明了一个由10个结构体指针组成的数组,而不是一个结构体数组。否则这个结构体数组将占。

    3、用243 * 10=2,430字节的内存。使用指针数组可以最大限度减小内存消耗,直到用malloc语句为记录实际分配内存空间。作为此过程的演示,下面的代码只为一个记录分配空间,保存某个值后又将空间释放:包含指针的结构体结构体可以包含指针,如下所示:typedef structchar name21;char city21;char phone21;char *comment; Addr;Addr s;char comm100;gets(s.name, 20);gets(s.city, 20);gets(s.phone, 20);gets(comm, 100);s.comment=(char *。

    4、)malloc(sizeof(charstrlen(comm)+1);strcpy(s.comment, comm);typedef structchar s181;char s281;char s381; Rec;Rec *a10;a0=(Rec *)malloc(sizeof(Rec);strcpy(a0-s1, hello);free(a0);int *p;int i;p=(int *)malloc(sizeof(int10);for (i=0; iname, Leigh);strcpy(*r).name, Leigh);strcpy(*r).city, Raleigh);strcpy(。

    5、*r).state, NC);printf(%sn, (*r).city);free(r);typedef structchar name21;char city21;char state3; Rec;typedef Rec *RecPointer;RecPointer r;r=(RecPointer)malloc(sizeof(Rec);结构体指针变量的概念当一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。结构体指针变量的定义结构体指针变量定义的一般形式为:struct 结构体类型名 *结构体指针变量名;例如,有如下结构体类型定义:#define N 10 /* 10 门课程 *。

    6、/#define MAXLEN 20 /* 学生姓名最大长度 */struct studentchar nameMAXLEN;int scoreN; ;则 , 要定义一个指向 student 的结构体指针变量 pstu , 可写成 :struct student *pstu;结构体指针变量的引用结构体指针变量必须要先赋值后才能使用。赋值时,是把结构体变量的首地址赋给该指针变量. 如: struct student s, *pstu;pstu = &s;定义了结构体指针变量后,访问各成员的一般形式为:( *结构体指针变量 ).成员名或为:结构体指针变量-成员名例如:( *pstu ) .name。

    7、 或者 pstu-name 【例7-1】结构体指针变量的顶替及使用方法。 源程序/*/* 程 序 名: samp7_1 c */* 作 者: dyq */* 编制时间: 2004 年 7 月 16 日 */* 程序功能:举例说明 结构体指针变量的具体用法 */*/#include stdio.h#define N 5 /* 5 门课程 */#define MAXLEN 20 /* 学生姓名最大长度 */*/* 函 数 名: main */* 函数功能:主函数 */* 入口参数:无 */* 返 回 值:无 */*/void main()struct studentchar nameMAXLEN;。

    8、int scoreN; s1 = Li ming, 80, 75, 90, 78, 89 , *p;int i;/* 用结构体变量访问其成员 */printf( 姓名为: %sn, s1.name );printf( 成绩为: );for ( i=0; iname );printf( 成绩为: );for ( i=0; iscore i );printf( n ); 指向结构体的指针赋值举例struct studentchar name20;void main()struct student *st99;st5=(struct student*)calloc(1, sizeof(struct student);sprintf(st5-name, xyz。

    展开全文
  • (不清楚可以自己sizeof)所以我们并没有开辟出一个结构体的空间,你只能新建一个结构体(正常的struct time x或者使用malloc),然后把结构体的地址赋值给p,它才能够正常运行。如果想要开辟出空间,建议直接使用 malloc...

    概 述

    如果我们只是 struct time *p;

    我们只是创建了一个指针,只会在栈中分配指针大小的空间来存放地址,一般情况下占用4个或者8个字节的空间。(不清楚可以自己sizeof)

    所以我们并没有开辟出一个结构体的空间,你只能新建一个结构体(正常的struct time x或者使用malloc),然后把结构体的地址赋值给p,它才能够正常运行。

    如果想要开辟出空间,建议直接使用 malloc 来开辟,这样子内存上会直接开辟出N个结构体大小的空间给这个指针使用,我们就可以去初始化了

    实验一

    int main()

    {

    struct time *p;

    (*p).min = 0;

    (*p).hour = 1;

    printf("%d", p->min);

    }

    实验二

    {

    struct time *p;

    p->min = 0;

    p->hour = 1;

    printf("%d", p->min);

    }

    本以为这两种情况下都是有输出的,但是结果是报warning

    warning: 'p' is used uninitialized in this function

    但是如果我进行实验三

    实验三

    int main()

    {

    struct time t[2] = { {30, 5}, {50, 6} };

    struct time *p;

    p = &t[0];

    p->min = 0;

    p->hour = 1;

    printf("%d", p->min);

    }

    实验三是可以正常运行的,也就是或结构体指针必须先创建一个结构体变量,然后把这个变量的地址赋值给指针后,这个指针才可以正常使用,而不能被单独赋值。

    思考后结论: 如果我们只是 struct time *p;

    我们只是创建了一个指针,只会在栈中分配指针大小的空间来存放地址,一般情况下占用4个或者8个字节的空间。(不清楚可以自己sizeof)

    这么并不会在内存上开辟出一块空间给我们存放min和hour,

    所以min和hour的空间你根本就没有,自然没办法去在这个空间上去填上值。

    如果想要开辟出空间,建议直接使用 malloc 来开辟,这样子内存上会直接开辟出N个结构体大小的空间给这个指针使用,我们就可以去初始化了

    int main()

    {

    struct time *p = (struct time *)malloc(sizeof(struct time) * 1);

    p->min = 0;

    p->hour = 1;

    printf("%d %d", p->min, p->hour);

    }

    像这样子,就可以成功打印。

    展开全文
  • 指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针包括用户自定义的类型创建结构体指针是极常见的下面是一个例子 r是一个指向结构体的指针请注意因为r是一个指针所以像其他指针一样占用4个字节的内存而...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...

    渣渣c的c语言学习之路

    1.关于c语言的结构体:

    首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活使用,然而,在我们实际应用中,每一种变量进行一次声明,再结合起来显然是不太实际的,类如一位学生的信息管理,他可能有,姓名(char),学号(int)成绩(float)等多种数据。如果把这些数据分别单独定义,就会特别松散、复杂,难以规划,因此我们需要把一些相关的变量组合起来,以一个整体形式对对象进行描述,这就是结构体的好处。

    2首先我们要了解一些小知识

    2.1**只有结构体变量才分配地址,而结构体的定义是不分配空间的。**
    2.2结构体中各成员的定义和之前的变量定义一样,但在定义时也不分配空间。
    2.3结构体变量的声明需要在主函数之上或者主函数中声明,如果在主函数之下则会报错
    2.4c语言中的结构体不能直接进行强制转换,只有结构体指针才能进行强制转换
    2.5相同类型的成员是可以定义在同一类型下的
    列如

    
    struct Student
    { 
    	int number,age;//int型学号和年龄
    	char name[20],sex;//char类型姓名和性别
    	float score;
    }

    最后的分号不要忘了 有的编译器会自动加上,因此有的同学就会不注意。

    3关于结构体变量的定义和引用

    在编译时,结构体的定义并不分配存储空间,对结构体变量才按其数据结构分配相应的存储空间

    
     struct Book
     { 
     	char title[20];//一个字符串表
    
    示的titile 题目
    	char author[20];//一个字符串表示的author作者
     	float value;//价格表示 
     };//这里只是声明 结构体的定义 
    struct Book book1,book2;//结构体变量的定义 分配空间
    
    book1.value;//引用结构体变量
    

    定义结构体变量以后,系统就会为其分配内存单元,比如book1和book2在内存中占44个字节(20+20+4)具体的长度你可以在你的编译器中使用sizeof关键字分别求出来。
    列如

    当然,要注意一点:用sizeof关键字求结构体长度时,返回的最大基本类型所占字节的整数倍 比方说我们上面求得的为44 为 float(4个字节)的整数倍,
    但是我们把title修改为title[22]; 这时正常长度为46 ,但是你会发现实际求得的为48,(4的整数倍)

    这就涉及到结构体的存储

    1结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。

    2.结构体的每个成员相对结构体首地址的偏移量(offset)都是最大基本类型成员字节大小的整数倍,如果不是编译器会自动补齐,

    关于这个我们简单介绍下:

    1.偏移量----偏移量指的是结构体变量中成员的地址和结构体变量首地址的差。即偏移字节数,结构体大小等于最后一个成员的偏移量加上他的大小,第一个成员的偏移量为0,

    struct S1
    {
        char a;
    
        int b;
    
        double c;
    };
    

    这里char a 偏移量为1 之后为int b 因为偏移量1不为int(4)的整数倍,所以会自动补齐,而在 double c 时,偏移量为8 是double(8)的整数倍,所以不用自动补齐 最后求得结构体得大小为 16

    具体看下图:
    在这里插入图片描述
    通过上面的代码同学们应该会有一个简单的认知

    4结构体变量的初始化

    结构体的初始化有很多需要注意的地方,这里我们说明下
    首先是几种初始化的方法
    ps在对结构体变量初始化时,要对结构体成员一一赋值,不能跳过前面成员变量,而直接给后面成员赋初值,但是可以只赋值前面几个,对与后面未赋值的变量,如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL,即‘\0’

    4.1定义时直接赋值

    struct Student
    { 
    	char name[20];
    	char sex;
    	int number;
    }stu1={"zhaozixuan",'M',12345};
    //或者
    struct Student
    { 
    	char name[20];
    	char sex;
    	int number;
    }struct Student stu1={"zhaozixuan",'M',12345};
    
    

    注意字符为‘ ’ 字符串为""
    4.2定义结构体之后逐个赋值

    stu1.name="王伟";
    stu1.sex='M';
    stu1.number=12305;
    //也可用strcpy函数进行赋值
    strcpy(stu1.name,"王伟");
    
    

    4.3定义之后任意赋值

     struct Student stu1={
      .name="Wang",
      .number=12345,
      .sex='W', 
     };//可以对任意变量赋值
    

    这样写的好处时不用按照顺序来进行初始化,而且可以对你想要赋值的变量直接进行赋值,而不想赋值的变量可以不用赋值

    需要注意的是如果在定义结构体变量的时候没有初始化,那么后面就不能全部一起初始化了;

    等下结构体数组初始化时我们还会有一个讲解

    这里我们顺带提一下typedef说明结构体类型


    这里的BOOK就相当于struct book的一个别名一样,用它来定义结构体变量非常简便
    主要也是考二级要用到,所以我们简单介绍下

    5结构体变量的引用(输出和输入)

    5.1结构体变量的赋值用scanf赋值和printf输出时跟其他变量操作一样
    但是有几点需要注意
    (1) .是运算符,在所有运算符优先级中最高
    (2)如果结构体的成员本身是一个结构体,则需要继续用.运算符,直到最低一级的成员。

    struct Student
    {	char name[20];
    	char sex;
    	int number;
    	struct Date
    	{
    		int year;
     		int month;
     		int day;
    	}birthday;
    
    }stu1;
    printf("%d",stu1.birthday);//这样子是错误的,因为birthday也是一个结构体变量
    scanf("%d",&stu1.birthday.month);//正确
    

    (3)可以引用接头体变量成员的地址,也可以引用结构体变量的地址:

    printf("%o", student);(输出student的首地址)(%o 按八进制输出)

    6结构体数组及其初始化(重点)

    这里我们简单说下,具有相同类型的结构体变量组成数组就是结构体数组

    结构体数组与结构体变量区别只是将结构体变量替换为数组

    struct Student
    { 
    	char name[20];
    	char sex;
    	int number;
    }stu1[5]={
    	 {"zhaozixuan",'M',12345},
    	 {"houxiaohong",'M',12306},
    	 {"qxiaoxin",'W',12546},
    	 {"wangwei",'M',14679},
    	 {"yulongjiao",'W',17857}
    };
    stu1[3].name[3]//表示stu1的第三个结构变量中姓名的第五个字符
    //若初始化时已经是结构体数组全部元素[]中的数可以不写如stu1[]=
    

    注意结构体数组要在定义时就直接初始化,如果先定义再赋初值是错误的
    比如:

    struct Student stu1;
    stu1[3]={
      {"zhaozixuan",'M',12345},
      {"houxiaohong",'M',12306},
      {"qxiaoxin",'W',12546}
      };
      
    

    这样子是错误的,

    这里我在写的时候遇到一些问题,还是结构体数组初始化的问题,折腾了下解决了,给大家分享下
    对于数组初始化时
    比如

    char str[20];
    str="I love you";/* 这样会修改数组的地址,但是数组的地址分配之后是不允许改变的 */
    
    

    在第一条语句中 str就已经被定义成数组而在C99标准中不允许将字符串(实际上是一个指针变量) 赋值给数组,所以如果我们直接赋值是错误的

    那么怎么弄呢
    这里提供3种方法

    1.定义数组时直接定义
    char str[20]=“I love you”;

    2.用strcpy或者memset函数进行复制
    char str[20];
    strcpy(str,“I love you”);
    再用到memset函数时,出现了一些问题
    对于memcset函数简单介绍下

    memset
    void *memset(void *s,int c,size_t n)
    作用:将已开辟内存空间s的首n个字节的值设为值c。

    char str[20];
    memset(str,'a',20);
    

    如果是字符类型数组的话,memset可以随便用,但是对于其他类型的数组,一般只用来清0或者填-1,如果是填充其他数据就会出错

    int str[10];
    memset(str,1,sizeof(str));//这样是错误的
    
    

    这里我们说下这个错误,

    首先我们要知道memset在进行赋值时,是按字节为单位来进行赋值的,每次填充的数据长度为一个字节,而对于其他类型的变量,比如int,占4个字节 所以sizeof(str)=40; 而用memset赋值时,将会对指向str地址的前40个字节进行赋值0x01(00000001) 的操作,把0x00000000赋值4次0x01操作变为0x01010101(00000001000000010000000100000001)

    相当于给“前10个int”进行了赋值0x01010101的操作 对应十进制的16843009
    所以会出很大的错误

    这里请务必要注意,但是如果是清零一个数组用memset还是很方便的
    简单使用的话同学们用strcmp函数就行

    3用指针(注意内存分配)
    char *str;
    str=“I love you”;

    这两句话的本质是,在内存中开辟一段内存空间,把"I love you"放进这段内存空间,然后把这段内存空间的地址交给str,由于str是变量,所以给它赋值是合法的。

    请注意,在我们进行数组初始化的时候如果定义的数组过长,而我们只初始化了一部分数据,对于未初始化的数据如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL,即‘\0’ 即不足的元素补以默认值
    这里我们在4小节中也提到了
    比如

    int str[10]={1};//这里只是把str的第一个元素赋值为1,其他元素默认为0
    
    



    7结构体与指针

    我们知道,指针指向的是变量所占内存的首地址,在结构体中,指针指向的是结构体变量的起始地址,当然也可指向结构体变量的元素
    这里我们分为三部分
    7.1指向结构体变量的指针

    定义形式一般为
    struct 结构体名* 指针名;
    比如: struct Student* p;

    struct Student
    {	
    	char cName[20];
     	int number;
     	char csex;  
    }student1;
    struct Student*p;
    p=&student1;
    //若为结构体数组则
    struct Student stu1[5];
    struct Student*p;
    p=stu1;//因为stu1为结构体数组而p=stu1直接是指向stu1的首地址,就不用再加&符
    
    

    用结构体指针变量访问结构体变量成员有以下两种方式:
    (*p).cName //这里的括号不能少,在5.1中有提到
    p->cName

    简单来说以下三种形式是等价的

    p->cName
    (*p).cName 
    student1.cName
    p->cName //可以进行正常的运算
    

    p->number++; 是将结构体变量中number的值进行运算,然后再加一,
    这里要注意下,等下在7.2中会有比较

    7.2指向结构体数组的指针

    7.1中我们已经提到结构体数组指针的命名,这里我们仅对一些知识点做下介绍
    这里我们接着来说结构体数组指针
    在我们想要用指针访问结构体数组的第n个数据时可以用

    struct Student stu1[5];
    struct Student*p;
    p=stu[n];
    (++p).number//是指向了结构体数组下一个元素的地址
    
    

    7.3结构体成员是指针类型变量
    比如

    struct Student
    {
     	char* Name;//这样防止名字长短不一造成空间的浪费
     	int number;
     	char csex;  
    }student1;
    
    

    在使用时可以很好地防止内存被浪费,但是注意在引用时一定要给指针变量分配地址,如果你不分配地址,结果可能是对的,但是Name会被分配到任意的一的地址,结构体不为字符串分配任何内存存储空间具有不确定性,这样就存在潜在的危险,

    struct Student
    {
     	char* Name;
     	int number;
     	char csex;  
    }stu,*stu;
    
    stu.name=(char*)malloc(sizeof(char));//内存初始化
    

    这里我们说一下,同学们看书的时候一般不会看到,
    如果我们定义了结构体指针变量,他没有指向一个结构体,那么这个结构体指针也是要分配内存初始化的,他所对应的指针类型结构体成员也要相应初始化分配内存

    struct Student
    {
     	char* Name;
     	int number;
    	char csex;  
    }stu,*stu;
    stu = (struct student*)malloc(sizeof(struct student));./*结构体指针初始化*/
      stu->name = (char*)malloc(sizeof(char));/*结构体指针的成员指针同样需要初始化*/  
    
    

    7.4二叉树遍历算法
    二叉树的二叉链表类型定义如下:
    typedef struct btnode {
    datatype data;
    struct btnode *lchild,*rchild;
    };
    这里我们仅仅提出以下,因为涉及到链表,感兴趣的同学可以去学习下(二级要用),
    7.5结构体作为函数参数

    首先我们要注意的一点,使用结构体变量作为函数参数的时候,采取的是值传递的方式,将结构体所占内存单元的内容全部传递给形参,并且形参必须也要是同类型的结构体变量,在使用时,会自动创建一个结构体变量作为原变量的副本,并且也需要占内存,并且在调用期间如果修改(形参)结构体中成员的值,修改值是无效的

    而如果用指针作为实参,传递给函数的形参,这时候传递的是结构体的地址,形参所指向的地址就是结构体变量的地址,这时候进行修改的话是可以修改的,这正是指针的精华所在

    在这里我们再提供几种互换两个结构体的方法

    struct Student
    {
     char cName[20];
     int number;
     char csex;  
    }student1,student2;
    struct Student student1={"Wang",12345,'W'};
    struct Student student2={"Zhao",54321,'M'}; 
    struct Student*stu1=&student1;
    struct Student*stu2=&student2;
    
    struct Student *student3;
    student3=stu1;
    stu1=stu2;
    stu2=student3;//互换地址
    
    2对于同类型结构体直接互换值就行
    struct stu student3;
    student3=student1;
    student1=student2;
    student2=student3;
    //这里也可以写成应strcmp函数互换
    
    3memcpy()函数进行互换
    
    
    4比较笨的方法: 用for循环互换
    

    最后提下memset清空结构体

    struct Student
    {
     char cName[20];
     int number;
     char csex;  
    }stu1;
    
    一般情况下,清空str的方法:
      str.cName[0]='\0';
      str.csex='0';
      str.number=0;
      但是我们用memset就非常方便:
      memset(&str,0,sizeof(struct Student));
      如果是数组:
      struct Student stu[10];
      就是
      memset(stu,0,sizeof(struct Student)*10);
    

    整理不易,点个赞再走呗!

    展开全文
  • C语言结构体指针陷阱

    2021-05-22 13:44:47
    一、“.”和“->”区别:当声明一个结构体时,因为自动分配...但如果声明的是一个结构体指针,则需要手动开辟一个结构体内存后,将这个指针指向该内存块后,再使用“->”进行内部变量访问,同时 (*o).value 等...

    一、“.”和“->”区别:

    当声明一个结构体时,因为自动分配了结构体的内存空间,所以可以直接用“.”访问相应结构体内的存储单元,比如:

    typedef struct Node{

    int value;

    }node;

    node o;

    o.value=2;

    但如果声明的是一个结构体指针,则需要手动开辟一个结构体内存后,将这个指针指向该内存块后,再使用“->”进行内部变量访问,同时 (*o).value 等价于 o->value。

    node *o;

    o->value=2;

    二、指向结构体的指针必须初始化:

    #include

    typedef struct Node{

    int value;

    }node;

    int main(){

    node *o;

    o->value=2;

    printf("%d",o->value);

    return0;

    }

    这段代码编译没问题,运行却出错,为什么呢?

    定义了一个结构体指针o用来指向一个node结构体,但是你却没有给他赋值,系统只知道“o应该是一个node结构体内存单元的首地址”,但是地址是多少呢,还没有分配,所以此时o的值为NULL,*o指向的是一个空或者随机的内存空间,常说的“野指针”。所以p->a=1这句就会出错。 所以我们应该给o进行初始化,初始化有两种方式。

    一种是malloc动态分配内存:

    o=(node *)malloc(sizeof(node));

    o->value=2;

    另一种是将o指向一个已经存在的node结构体:

    node r;

    o = &r;

    o->value=2;//因为o为指针,所以此时其实为r的value被赋值为2

    6bb51b6c0935862464565ab1d99451c8.png

    4a668feaa3018a2e1706f07e5002bcc8.png

    Monkey&Penguin

    发布了4 篇原创文章 · 获赞 0 · 访问量 63

    私信

    关注

    标签:node,指向,int,value,C语言,陷阱,指针,结构

    来源: https://blog.csdn.net/qq_40285768/article/details/104607834

    展开全文
  • C语言结构体赋值

    2020-09-20 11:54:21
    先不做讲解,看看下面的代码,大家猜一下打印的值,看大家对C语言结构体赋值结构体指针是不是了解: #include <stdio.h> int main () { typedef struct test { int a; int b; char c[20]; }TEST;...
  • C语言结构体指针赋值[借鉴].pdf
  • 数组定义:char acBuf[sizeof(TRANS_HEAD_S) + sizeof(USER...结构体定义:typedef struct{int iOne;int iTwo;int iThr;}TRANS_HEAD_S;typedef struct{int iUser;}USER_HEAD_S; 1、实现结果:acBuf[0] = 11acBuf[1] ...
  • 趁这个机会,研究了一下C语言的结构体和结构体指针,顺便总结一下!注:关于结构体的三种形式,可以自己研究研究。我实验的程序如下:#include struct stu{char name[20];long number;float score[4];};struct data{...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month;...1)C语言中,在相同类型的变量间赋值时是直接内存复制的; 2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • 1结构体赋值 #include <windows.h> struct MyStruct { int a; int b; char c[20]; }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ..
  • 定义结构体指针:Seq *s;或者llink t;之后关于s与t的用法,其实完全一样,只是在定义时不同,Seq *就相当于llink了以为定义完指针以后就可以使用了吗?NO!需要为指针申请空间才能正常使用,否则会在输入这里出现很...
  • C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:struct ...
  • 一、结构体的定义struct student{ //struct 结构体名long studentID; //数据类型 成员名1char studentName[10]; //数据类型 成员名2int scoreMath; //数据类型 成员名3};二、结构体变量的定义1先声明结构体模板,再...
  • c语言最常见的几种东西:结构体,数组,指针和函数。单个定义很好理解,组合在一起就会让人头大。先说函数、数组和指针的组合。 1、函数、数组和指针的组合 包括指针函数、函数指针指针数组和数组指针,先从...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼在函数中对结构体赋值时赋不上,用printf查看结果始终为0,有人说是因为结构体指针使用前没有进行实例化导致。一知半解没明白什么叫实例化,好像是要用malloc分配内存。...
  • 第一种写法:(*a).p=&b;.的优先级高于*,(*pointer)两边的括号不能少。...是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用...
  • 定义结构体 文件1 <GlobalVar1.h> /******************************* * file: GlobalVar1.h * author: hehl * time: 2019/11/5 *******************************/ #ifndef __GLOBALVAR1_H__ #define __...
  • 时间不是很充裕就只摆示范代码和注释了 看完这些样例代码就能理解透彻了 #include<stdio.h> #include<string.h> ...意思是把变量a赋值为1 int是变量类型(要定义自己的类型用结构体.
  • @C语言结构体、数组、指针综合练习 #include <stdio.h> #include <string.h> /定义学生实体/ struct students { char id[20]; char name[20]; float Chinese; float math; float English; }; /* 函数...
  • 当一个指针变量指向结构体时,我们就称它为C语言结构体指针的定义形式一般为:struct 结构体名 *变量名;下面是一个定义结构体指针的实例://结构体struct stu{char *name; //姓名int num; //学号int age; //年龄char...
  • c语言结构体赋值问题

    2020-07-03 10:15:18
    一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。但是稍微复杂一点的结构体里面会 有指针成员,那么以上的浅拷贝则会有问题。 1)赋值会直接将...
  • C语言结构体进行赋值操作一、说明二、环境三、代码四、运行 一、说明 定义一个结构体: 并对其进行初始化操作,赋值操作,打印 1.注意, struct 定义的位置可以在main函数的外边 2.用的时候是 struct student ...
  • C语言 结构体指针强制转换

    万次阅读 2017-05-27 22:45:05
    最近写c程序遇到的结构体指针强转的坑,记录一下. 是一个简单的菜单程序,程序用到链表,表中存储了9个不同命令.每次将用户输入的命令与表中存储的命令名作对比(遍历查询),然后执行相应功能.总体结构:linktable.h:定义...
  • 关于结构体里指针的指针赋值问题typedefstruct_pic_datapic_data;struct_pic_data{unsignedchar**rgba;};...pic_data*poutdata=newpic_data;poutdata->rgba=(unsignedchar**)malloc(1024);poutdata->rgba[0][0...
  • (*结构体指针变量).成员名 与 结构体指针变量->成员名 是等价的,为什么等价我就不造了 struct s1 s={1.1,{1,2,{1,3}}};//这样初始化可以,但是如果分成两句变成直接赋值不可以,为什么呢 #include struct s1 { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,164
精华内容 16,065
关键字:

c语言结构体指针赋值

c语言 订阅