精华内容
下载资源
问答
  • 结构体指针访问结构体数组

    千次阅读 2015-09-08 22:57:42
    #include"stdio.h" struct student{ int code; char name[10]; char sex[3]; int age; }stu; main(){ struct student stus[4]; int i; struct student *s; for(i=0;i;i++){
    #include"stdio.h"
    struct student{
        int code;
        char name[10];
        char sex[3];
        int age;
    }stu;
    main(){
    
        struct student stus[4];
        int i;
    
        struct student *s;
        for(i=0;i<4;i++){
                struct student stu;
            printf("学号、姓名、性别、年龄:");
            scanf("%d %s %s %d",&stu.code,stu.name,stu.sex,&stu.age);
            stus[i]=stu;
        }
    
        for(s=stus;s<stus+4;s++){
             printf("%d %s %s %d\n",s->code,s->name,s->sex,s->age);
        }
    
    
    
    }
    

    展开全文
  • 一:结构体指针 指向结构体变量的指针,称为结构体指针 Stu stu1={0};...结构体指针直接访问成员变量:有以下两种方式,第二种更加常用 (1)(*p).sex='m'; (2)p->sex='m' 二:结构体数组与指针的关系

    一:结构体指针

    指向结构体变量的指针,称为结构体指针

    Stu stu1={0};

    Stu *p=&stu1;

    这里Stu*:表示结构体指针类型(类型)

    p:表示结构体指针变量(变量名)

    &stu1:表示结构体变量地址(初值)

    结构体指针直接访问成员变量:有以下两种方式,第二种更加常用

    (1)(*p).sex='m';

    (2)p->sex='m'

    课上练习一:定义⼀一个点坐标的结构体CPoint,包含两个float成员x,y。定义两个CPoint结构体变量m,n使⽤用两个结构体指针分别指向m,n然后通过指针计算两点距离(提⽰示:1、勾股定理,2、开⽅方函数sqrt)

    typedef struct point
    {
        float x;
        float y;
    }CPoint;

        CPoint m={3,5};
        CPoint n={6,9};
        CPoint *p_m=&m;
        CPoint *p_n=&n;
        //访问方法一:指针变量名->成员变量
        double result1=sqrt((p_m->x-p_n->x)*(p_m->x-p_n->x)+(p_m->y-p_n->y)*(p_m->y-p_n->y));
         printf("两点的距离是:%lf\n",result1);
        //访问方法二:(*指针变量名).成员变量(最好不用)
         double result2=sqrt(((*p_m).x-(*p_n).x)*((*p_m).x-(*p_n).x)+((*p_m).y-(*p_n).y)*((*p_m).y-(*p_n).y));
          printf("两点的距离是:%lf\n",result2);

    课上练习二:

    student stu = {1,”lan ou”,’m’,95.6};student * p = &stu;请通过p将name成员中的第⼀一个字⺟母改成⼤大写,所有’ ‘(
    空格)改成下划线’_’

    typedef struct stu
    {
    int num;
    char name[20];
    char sex;
    float score;
    }student;

    student stu={1,"lan ou",'m',95.6};
    //定义结构体指针:
    student *p=&stu;
    p->.name[0]='L';
    printf("%s\n",p->.name);

    int i=0;

    while(p->.name[i]!=0){

    if(p->.name[i]==' '){

    p->.name[i]=='_';

    i++;

    }

    }

    printf("%s\n",p->.name);

    二:结构体数组与指针的关系

    顾名思义,也就是说该指针是指向于数组(只是多个结构体组成的数组)的指针,不同于上面的是指向于结构体的指针。

    如下例子:

    定义一个结构体

    typedef struct stu

    {

    int num;

    char name[20];

    }Stu;

       Stu stu1={1,"zhangsan"};
        Stu stu2={2,"wukong"};
        Stu stu3={2,"bajie"};
        Stu stus[3]={stu1,stu2,stu3};
        Stu *p=stus;这就是一个结构体数组指针//stus本来就是一个数组名。也就是数组的首地址stus[0]地址
        //访问数组的变量则可以“(p+i)->数组变量名”的格式访问
        for (int i=0; i<3; i++) {
            printf("%s\n",(p+i)->name);//(p+i)则相当于数组stus[i],跟上面的结构体指针不同,不会有(p+i)这回事
        }
        //把原来数组的第二个(p+1)学生的学号num修改成4号,要用指针p,也可以用数组stus[1].num=8
        (p+1)->num=4;
    //    stus[1].num=8;
        //访问结构体数组则可以用指针(p+1)->name,也可以用数组stus[1].num
        printf("num=%d,name=%s\n",stus[1].num,(p+1)->name);

    //知识点3
        //结构体指针为函数参数(传的是指针,则返回的也是指针
        //使⽤用指针查找学员数组中性别为男的学员,成绩增加10分,超过100分的记为100分)
    //    student stu1={1,"lanou",'m',95.6};
    //    student stu2={2,"dagang",'m',65.6};
    //    student stu3={3,"lihong",'f',85.6};
    //    student stus[3]={stu1,stu2,stu3};
    //    student *p=stus;
    //    //打印指针数组,调用打印函数
    //    print(p,4);
    //    //调用改变函数
    //    gaibian(p,4);
    //    //打印指针数组,调用打印函数
    //    print(p,4);
     
    //    for (int i=0; i<3; i++) {
    //        printf("num=%d,name=%s,sex=%s,score=%f\n",(p+i)->num,(p+i)->name,(p+i)->sex,(p+i)->score);
    //    }
        //    student *p_stu=&stu;

    函数定义:
    传的是指针,则返回的也是指针

    student * gaibian(student *p,int count){//定义一个指针数组函数student * gaibian()
        for (int i=0; i<count; i++) {
            if ((p+i)->sex =='m') {
                if (((p+i)->score +=10)>=90) {
                    strcat((p+i)->name, "高富帅");
                }else{
                    strcat((p+i)->name, "穷光蛋");
                }
            }else{
                printf("女生不用修改\n");
            }
            if ((p+i)->sex =='m') {
                if ((p+i)->score >=100) {
                    (p+i)->score=100;
                }
            }
        }
        return p;//不可遗漏,返回的也是指针数组
    }

    student * print(student *p,int count)
    {
        for (int i=0; i<count; i++) {
            printf("num=%d,name=%s,sex=%c,score=%f\n",(p+i)->num,(p+i)->name,(p+i)->sex,(p+i)->score);
        }
        return p;
    }

    三:预编译指令

    在头文件里写的文件:

     //预编译知识点4


    //main函数里面的内容:

    //预编译知识点4,
    //(1)头文件
    //(2)#define N 30表示把N定义为30,还可以替换表达式或函数,但一般不用,只用来替换常量变量值,书写要么是纯大写,或者驼峰命名法,如果有表达式则每一个都要加上括号(),如((A)+(B))
    #define PI 3.1415926
    //带参宏
    #define COUNT(A,B) ((A)>(B)?(A):(B))//找两个数的大值

    //(3)条件编译(后面不跟任何东西)
    #define KIOS    //(1)头文件
        //(2)#define N 30表示把N定义为30,还可以替换表达式或函数,但一般不用,只用来替换常量变量值,书写要么是纯大写,或者驼峰命名法,如果有表达式则每一个都要加上括号(),如((A)+(B))
        //(3)条件编译
        //如:
        float r=5;
        float result=2*PI*r;
        printf("%f\n",result);
        int max=COUNT(3+5,2+8);
        printf("%d\n",max);
        //(3)条件编译可以放在main函数里面
        //用于IOS跨平台开发时用
        //1)形式一:
    #ifdef KIOS//KIOS跟上面的KIOS一样则输出第一句,否则输出else那句
        printf("KIOS已经被定义过\n");
    #else
        printf("KIOS未被被定义过\n");
    #endif
        //2)形式二:
    #ifndef KIOS
        printf("KIOS未被定义过\n");
    #else
        printf("KIOS已经被定义过\n");
    #endif
        //3)形式三:
    #if 3
        printf("if为真,即非零,输出这句");
    #else
        printf("if的条件为假0,则输出这句");
    #endif


    展开全文
  • 文章目录结构体嵌套结构体数组初始化结构体数组结构体指针指针访问成员方法 结构体嵌套 比如上篇博客的代码 struct Book { char title[128]; char author[40]; float price; unsigned int date; char ...


    结构体嵌套

    比如上篇博客的代码

    struct Book
    {
        char title[128];
        char author[40];
        float price;
        unsigned int date;
        char publisher[40];
        
    };
    

    可以把date单独再定义成一个结构体

    struct Date
    {
    int year;
    int month;
    int day;
    };
    struct Book
    {
        char title[128];
        char author[40];
        float price;
        struct Date date;//别忘记了struct这个前缀
        char publisher[40];
        
    }book={"dainixue","yuyijie",48.8,{2017,1,1},"jiangsudaxue"};//这里直接初始化
    
    
    
    printf("date is: %d-%d-%d\n",book.date.year,book.date.month,book.date.day);
    

    结构体数组

    每个数组都是一个结构体的数据
    定义方法:
    1.在声明结构体的时候进行定义

    struct 结构体名称
    {
    成员;
    }数组名[长度];
    

    2.先声明一个结构体类型,再用此类型定义一个结构体数组

    struct 结构体名称
    {
    结构体成员;
    };
    struct 结构体名称 数组名[长度]

    初始化结构体数组

    在这里插入图片描述

    结构体指针

    指向结构体变量的指针
    struct Book *pt;
    我们知道数组名其实是指向数组的第一个元素的地址,所以可以将数组名直接赋值给指针变量,但要注意,结构体变量不一样,结构体变量名并不指向结构体的地址,所以要进行取值,必须要用取址运算符 &。
    pt=&book;

    指针访问成员方法

    1.(*结构体指针).成员名
    2.结构体指针->成员名//箭头只能用于指针
    两种方法在实现上完全等价

    struct Book *pt;
    pt=&book;
    printf("name: %s\n",(*pt).title);
    printf("name: %s\n",pt->title);
    
    展开全文
  • 一、结构体指针 与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下: struct Student stu = { 1001,"Li Lei",'M'...成员变量名”的方式访问结构体变量的成员。 实例演示: #in...

    目录

    一、结构体指针

    二、结构体数组

    1.结构体数组的定义

    2.结构体数组的初始化

    3.结构体数组的引用

    4.结构体数组指针


    一、结构体指针

    与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下:

    struct Student stu = { 1001,"Li Lei",'M',1.87 };  //定义一个Student 的结构体变量stu

    struct Student *p=&stu;    //定义一个Student的结构体指针变量来指向stu

    当程序中定义了一个指向结构体变量的指针,就可以通过“指针名->成员变量名”的方式访问结构体变量的成员。 

    实例演示:

    #include <stdio.h>
    
    typedef char NAME[10];
    typedef double DOU;
    typedef struct Student
    {
        int num;
        NAME name;
        char sex;
        DOU height;
    
    }Stu;
    
    
    int main() {
        Stu stu = { 1001,"Li Lei",'M',1.87 };
        Stu* p = &stu;
        printf("学生信息:\n");
        printf("学号:%d\n", p->num);
        printf("姓名:%s\n", p->name);
        printf("性别:%c\n", p->sex);
        printf("年龄:%.2lf\n", p->height);
    }

    运行结果:


    二、结构体数组

    1.结构体数组的定义

    一个结构体变量只能存储一组信息,如果要存储大量的信息,则可以定义一个结构体数组进行存储。

    定义结构体数组的方式有三种:

    ①先定义结构体类型,后定义结构体数组

    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    };
    
    struct Student stus[20];

    ②在定义结构体类型的同时定义结构体数组

    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    }stus[20];

    ③直接定义结构体数组

    struct
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    }stus[20];

    2.结构体数组的初始化

    结构体数组与一般数组类似,都通过为元素赋值的方式完成初始化。由于结构体数组中的每个元素都是一个结构体变量,因此,在为每个元素赋值时,需要将其成员的值依次放到一对大括号中。

    结构体数组的初始化方式:

    ①先定义结构体类型,后定义并初始化结构体数组

    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    };
    
    struct Student stu1[3] = { {1001,"Li Lei",'M',1.78},
                                {1002,"Li Hua",'M',1.87},
                                {1003,"Han Mei",'W',1.65}
                              };

    ②在定义结构体类型的同时定义结构体数组并初始化

    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    }stu1[3] = { {1001,"Li Lei",'M',1.78},
                 {1002,"Li Hua",'M',1.87},
                 {1003,"Han Mei",'W',1.65}
                };
    
    

    使用这种方式初始化结构体数组时,可以不指定结构体数组的长度,系统在编译时,会自动根据初始化的值决定结构体数组的长度。

    3.结构体数组的引用

    结构体数组的引用是指对结构体数组元素的引用,由于每个结构体数组元素都是一个结构体变量,因此结构体数组元素的引用于结构体变量类似。

    实例演示:

    #include <stdio.h>
    
    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    };
    
    struct Student stus[3] = { {1001,"Li Lei",'M',1.78},
                                {1002,"Li Hua",'M',1.87},
                                {1003,"Han Mei",'W',1.65}
    
                                };
    
    int main() {
        for (int i = 0; i < 3; i++) {
            printf("学生%d的信息\n", i + 1);
            printf("学号:%d\n", stus[i].num);
            printf("姓名:%s\n", stus[i].name);
            printf("性别:%c\n", stus[i].sex);
            printf("身高:%.2lf\n", stus[i].height);
            printf("\n");
        }
       
    }
    

    运行结果:

    4.结构体数组指针

    指针可以指向结构体数组,即将结构体数组的起始地址赋给指针变量,这种指针就是结构体数组指针。

    实例演示:

    #include <stdio.h>
    
    struct Student
    {
        int num;
        char name[10];
        char sex;
        double height;
    
    };
    
    struct Student stus[3] = { {1001,"Li Lei",'M',1.78},
                                {1002,"Li Hua",'M',1.87},
                                {1003,"Han Mei",'W',1.65}
    
                                };
    
    int main() {
        struct Student* p=stus ;//定义结构体数组指针p指向结构体数组stus
       
        for (int i = 0; i < 3; i++) {
            printf("学生%d的信息\n", i + 1);
            printf("学号:%d\n", p->num);
            printf("姓名:%s\n", p->name);
            printf("性别:%c\n", p->sex);
            printf("身高:%.2lf\n", p->height);
            printf("\n");
            p++;
        }
    
    }

    运行结果:

    结构体数组指针从定义上看,它和结构体指针没什么区别,只不过指向的是结构体数组。

     

     

    展开全文
  • ``` #include #include struct student { char num; ...0x00BB16B0 处有未经处理的异常: 0xC0000005: 写入位置 0xCCCCCCCC 时发生访问冲突。(代码中加粗的行: *q[i]=h[i];),这是为什么呢?
  • 结构体变量,结构体指针变量及其自增运算,结构体数组作函数的参数 借鉴博客园的大佬的例子,简单明了地说明结构体变量,结构体指针变量,结构体数组如何作函数的参数 新手不懂得话建议自己敲一下,我大一的笔记 p ...
  • 访问结构体变量 结构体的的定义 struct student { int age;//年龄 string name;//姓名 int score;//分数 }; 三种定义方式如下: #include <iostream> using namespace std; #include <string>...
  • [color=#FF0000]可是为什么感觉传进来的结构体指针变成了一个结构体数组?[/color] #include <stdio.h> typedef struct ex { int a; int b; }ex,*p_ex; void fun(p_ex temp); ex msg; int main...
  • 数组和结构体数组的数组名都是一个常量指针,指向(或存放)数组的首地址 ; 而结构体的变量名显然没有这样的作用.  对于数组,没有->的形式对于结构体,没有a[0]的形式而对于结构体数组,上图的六种形式都可以访问...
  • 字符、字符串、字符数组、字符串数组、结构体数组指针访问 测试一 #include <stdio.h> void test0() { printf("//==========test0_start===========\n"); char c; char *pc; /*第一步:所有变量都保存...
  • 今天在代码实现的时候,某一个设备状态结构体对应的设备有多个,因此定义了一个结构体数组,当在函数中处理时发现有点尴尬的是忘记了该怎么定义结构体指针参量才能在函数中正确访问各成员。 结论 关于结构体数组指针...
  • 通过结构体指针访问内容 #include <stdio.h> #include <stdlib.h> struct Test { char p[128];//定义数组 }; int main() { struct Test d; strcpy(d.p,"感觉自己萌萌哒");//把内容存放到数组当中...
  • C语言结构体数组指针的动态分配

    千次阅读 2020-03-03 23:44:28
    刚开始,由于485设备的种类并不是很多,而且主机的每个485口下挂的设备数目,也不是很多,因此采用了静态结构体数组的方式来做设备属性和数值的缓存(Shadow)。但是目前485种类是越来越多,而且规定每个485口下,...
  • 一、指针的概念 1、变量: 变量(type name =value):声明一个变量就像盖了一间...间接访问指针):(无法直接访问变量时,适用于跨函数,即从一个函数里改变另一个函数里变量的值) 比如:有3个抽屉,第1个抽屉藏5...
  • 打印数组中的每个元素,打印每个元素的地址: #include #include   void main(void) {   int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };   for (int *p = a; p < a + 10;p...
  • 指针概念指针内存结构:... *①声明指针变量②访问变量所指内存。区别:①中最前面有数据类型。 (3)函数是一种预编译结构,使用完后,函数连同所生成的内存空间会被系统回收 (4)址传递的好处,解决函数只能返回一个返
  • 当我们看到一个结构体指针的时候,不要下意识的觉得它只是指向某一个结构体实例的地址,因为该地址的内存单元的值是不确定的,如果在该内存起始位置分配了多个单位结构体大小的内存空间,那么该指针指向的地址也可以...
  • 结构体指针

    2017-09-11 22:28:58
    通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。 结构体指针变量定义的一般形式: 结构体名 *结构体指针变量名 当然也可以在定义结构体的同时定义这个结构体指针变量。 例如...
  • 指针概念指针内存结构:变量名->... *①声明指针变量②访问变量所指内存。区别:①中最前面有数据类型。 (3)函数是一种预编译结构,使用完后,函数连同所生成的内存空间会被系统回收 (4)址传递的...
  • C语言中的结构体指针

    千次阅读 多人点赞 2017-01-16 23:45:08
    结构体数组指针 结构体的自引用与不完全声明 结构体指针的概念概念:结构体变量的地址,指向某个结构体变量(同时也是结构体变量中第一个元素的地址),我们可以通过结构体变量可以指向结构体中包含的一些成员定义: ...
  • 访问结构体数组的四种方法

    千次阅读 2020-11-22 16:37:20
    访问结构体数组的三种方法 在堆上建立结构体数组 Stu ** arrstu = malloc(sizeof(Stu*)*20); 赋值 Stu s1 = {"dai",20}; arrstu[0] = &s1; 一、下标加->法 连续的内存空间都可以使用[]方法访问空间 arrstu...
  • 通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。 结构体指针变量定义的一般形式: 结构体名 *结构体指针变量名 当然也可以在定义结构体的同时定义这个结构体指针变量。 例如:(定义...
  • C语言结构体指针

    2019-04-01 19:51:57
    因为指针指向结构体变量的地址,因此可以使用指针访问结构体中的成员。定义结构体指针的一般形式是: 结构体类型 *指针名; struct Student *pStruct; 第一种方法是使用点运算符引用结构成员: (*pStruct...
  • 结构体和结构体指针

    万次阅读 2018-04-24 22:43:14
    结构体可以被声明为变量、指针数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。 定义与声明 结构体...
  • 2.指针访问:定义结构体数组info_s data[20],定义结构体指针变量info_s *ptr,该指针指向结构体数组ptr = data,通过指向该结构体数组的指针ptr来访问结构体数组中的数据。ptr->cout;ptr->path,ptr->filename,访问...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553
精华内容 221
关键字:

结构体指针访问结构体数组