精华内容
下载资源
问答
  • Arduino指向结构变量的指针和指向结构数组的指针打印输出 开发板验证采用:Arduino nano 开发环境:Arduino IDE struct stu { int num; char *name; char sex; float score; }boy[5]={ {101,"Zhou ping",'M',45}, ...

    Arduino指向结构变量的指针和指向结构数组的指针打印输出

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    }boy[5]={
    {101,"Zhou ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"Liou fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    };
    
    void setup()
    {
      Serial.begin(115200); 
    
    }
    void loop()
    {
      struct stu *ps;//定义结构指针变量
      char buff[40];
      char str[6];//用于转换结构体浮点数变量输出
    Serial.print("No\tName\t\t\tSex\tScore\t\n");
    for(ps=boy;ps<boy+5;ps++){//结构变量指针指向结构数组首地址
    dtostrf(ps->score,2,1,str);//浮点数不能直接sprintf()函数输出否则输出为?。
    sprintf(buff,"%d\t%s\t\t%c\t%s\t\n",ps->num,ps->name,ps->sex,str);
    Serial.println(buff);
    delay(3000);
    }
    
    
    }
    
    • 串口输出
    • 在这里插入图片描述
    • 将指针变量放在结构体定义的后面,效果同上
    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    }boy[5]={
    {101,"Zhou ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"Liou fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    },*ps;//在这里定义的结构指针变量
    
    void setup()
    {
      Serial.begin(115200); 
    }
    void loop()
    {
     // struct stu *ps;//定义结构指针变量
      char buff[40];char str[6];
    Serial.print("No\tName\t\t\tSex\tScore\t\n");
    for(ps=boy;ps<boy+5;ps++){//结构变量指针指向结构数组首地址
    dtostrf(ps->score,2,1,str);
    sprintf(buff,"%d\t%s\t\t%c\t%s\t\n",ps->num,ps->name,ps->sex,str);
    Serial.println(buff);
    delay(3000);
    }
    }
    

    *如果指向输出一个学生成员的信息,修改for循环条件即可

    for(ps=boy;ps<boy+1;ps++)//只输出{101,"Zhou ping",'M',45}
    
    for(ps=boy+1;ps<boy+2;ps++)//只输出{102,"Zhang ping",'M',62.5}
    

    等待以此类推即可。

    • 姓名name修改成String数据类型,打印则选择%s,对象.c_str()
     struct stu
    {
    int num;
    String name;
    char sex;
    float score;
    }boy[5]={
    {101,"Zhou ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"Liou fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    },*ps;
    
    void setup()
    {
      Serial.begin(115200); 
    
    }
    void loop()
    {
     // struct stu *ps;//定义结构指针变量
      char buff[40];char str[6];
    
    Serial.print("No\tName\t\t\tSex\tScore\t\n");
    for(ps=boy;ps<boy+1;ps++){//结构变量指针指向结构数组首地址
    dtostrf(ps->score,2,1,str);
    sprintf(buff,"%d\t%s\t\t%c\t%s\t\n",ps->num,(ps->name).c_str(),ps->sex,str);
    Serial.println(buff);
    delay(3000);
    }
    }
    
    展开全文
  • 一、结构数组的定义数组的元素可以是结构类型的。结构数组的每一个元素都是具有相同的结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。 如:一个班的学生的档案,一个车间...

    一、结构数组的定义

    数组的元素可以是结构类型的。结构数组的每一个元素都是具有相同的结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。

    如:一个班的学生的档案,一个车间职工的工资等。

    struct stu
    
    {
    
    Int num;
    
    char *name;
    
    char sex[20];
    
    float score;
    
    }boy[5];

    定义了一个结构数组boy,共有5个元素,boy[0]~boy[4].每个数组元素都有struct stu的结构形式。对数组结构可以做初始化赋值。

    #include<stdio.h>
    struct stu
    {
    	int num;
    	char *name;
    	char sex;
    	float score;
    }boy[5] = {
    	{101,"shi",'w',46},
    	{102,"wen",'m',76},
    	{103,"jie",'w',89.8},
    	{104,"jier",'m',25},
    	{105,"dada",'w',65},
    	};
    int main(int argc,char **argv)
    {
    	int i;
    	int c=0;
    	float ave;
    	float s = 0;
    	
    	for(i=0;i<5;i++) 
    	{
    		s += boy[i].score;
    		if (boy[i].score < 60)
    		{
    			c+=1;
    		}
    	printf("num=%d,name=%s,sex=%c,score=%2.f\n",boy[i].num,boy[i].name,boy[i].sex,boy[i].score);
            }
    	printf("s=%f\n",s);
    	ave = s/5;
    	printf("ave=%f\ncount=%d\n",ave,c);
    	return 0;
    }

    本例程序中定义了一个外部结构数组boy,总共5个元素,并做了初始化赋值。在main函数中用for语句逐渐累加各个元素的score,成员值存于s之中,如score的值小于60(不及格)即计数器C加1,循环完毕后计算平均成绩,并输出全班总分,平均分以及不及格人数。

    二、指向结构变量的指针

    一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量的值指向的是结构变量的首地址。

    通过结构指针即可访问该结构变量。

    结构指针变量的说明一般的格式为:    

            Struct stu *pstu;

    访问的一般形式为:

    结构指针变量->成员名

    例如:(*pstu).num;

    或者是:

    Pstu->num;

    /*

    结构指针变量的具体说明和使用方法

    */

    /*

    本例程序中定义了一个结构体stu,定义了类型结构变量boy1并做了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1,。然后在printf语句中用三种形式的输出boy1的各个成员值。

    从运算结果可以看出:

    结构变量.成员名

    (*结构指针变量).成员名

    结构指针变量->成员名

    */

    #include<stdio.h>
    struct stu 
    {
    	int num;
    	char name[20];
    	char sex;
    	float score;
    }boy1 = {102,"shi wen jie",'w',48},*pstu;
    int main(int argc,char **argv)
    {
    	pstu = &boy1;
    	printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",boy1.num,boy1.name,boy1.sex,boy1.score);
    	printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).score);
    	printf("num=%d\t,name=%s\t,sex=%c\t,score=%f\n",pstu->num,pstu->name,pstu->sex,pstu->score);
    	return 0;
    }

    三、指向结构数组的指针

    指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可以指向结构数组的一个元素,这时的结构指针变量的值是该结构数组元素的首地址。

    ***ps为指向结构数组的指针变量,则ps也是指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。

    /*

    在程序中定义了stu结构类型的外部数组boy并做了初始化赋值。在main中定义了ps为指向stu类型的指针。在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy中数组中的成员值。

    */

    /*
    用指针变量输出结构数组
    */
    #include<stdio.h>
    struct stu
    {
    	int num;
    	char name[8];
    	char sex;
    	float score;
    }boy[5] = {
    		{101,"shi",'w',65},
    		{102,"wen",'m',89},
    		{103,"jie",'w',86},	
    		{104,"jie jie",'m',70},
    		{105,"hi",'m',76},
    		
    };
    int main(int argc,char **argv)
    {
    	struct stu *ps;
    	printf("num\tname\tsex\tscore\n");
    	for(ps=boy;ps<boy+5;ps++)
    	{
    		printf("%d\t%s\t%c\t%f\n",ps->num,ps->name,ps->sex,ps->score);
    	}
    	return 0;
    }

    ***可以看出 结构指针变量可以访问结构变量或结构数组元素的成员,但是不能使他指向一个成员。也就是说,不允许取一个成员的地址来赋予它。

    错误的:ps  =  &boy[1].sex;

    正确的:ps  = boy;(赋予数组首地址)      ps = &boy[0];(赋予0号元素首地址)

    展开全文
  • 设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。 这与普通数组的情况是一致的。 【例11.6】用指针变量输出结构数组。 struct stu { ...

    指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。

    结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。

    设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。

    这与普通数组的情况是一致的。

    【例11.6】用指针变量输出结构数组。

    struct stu
    {
        int num;
        char *name;
        char sex;
        float score;
    }boy[5]={
              {101,"Zhou ping",'M',45},
              {102,"Zhang ping",'M',62.5},
              {103,"Liou fang",'F',92.5},
              {104,"Cheng ling",'F',87},
              {105,"Wang ming",'M',58},
            };
    main()
    {
     struct stu *ps;
     printf("No\tName\t\t\tSex\tScore\t ");
     for(ps=boy;ps<boy+5;ps++)
     printf("%d\t%s\t\t%c\t%f\t ",ps->num,ps->name,ps->sex,ps->score);
    }

    在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。

    在main函数内定义ps为指向stu类型的指针。

    在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。

    应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,

    但是,不能使它指向一个成员。

    也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。

    ps=&boy[1].sex;

    而只能是:ps=boy;(赋予数组首地址)

    或者是:ps=&boy[0];(赋予0号元素首地址)

    #include <stdio.h>
     
    struct student
    {
        int num;
        char name[20];
        char sex;
        int age; 
    };
    /*指向结构体类型的数组的初始化*/ struct student stu[3]={
    {10101,"Li Lin",'M',18},
    {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}};
    void main() { struct student *p;/*指向结构体类型的指针变量*/ printf("NO Name Sex Age\n"); for(p=stu;p<stu+3;p++)/*循环地址*/ { /* printf("%5d%-20s %2c %4d\n",p->num,p->name,p->sex,p->age); 等价于*/ printf("%5d%-20s %2c %4d\n",(*p).num,(*p).name,(*p).sex,(*p).age); } system("pause"); }
    #include <stdio.h>
    #include <iostream>
    #include<math.h>
    using namespace std;
    
    int main()
    {
       //定义结构类型
        struct human {
           char name[10];
           int sex;
           int age;
        };
    
    //声明结构数组和结构指针变量,并初始化
    human x[]={
    {"WeiPing",1,30},
    {"LiHua",1,25},
    {"LiuMin",0,23}},*p=NULL; //用下标变量的输出结构数组的元素 for (int i=0;i<3;i++) { cout<<x[i].name<<‘\t‘; cout<<x[i].sex<<‘\t‘; cout<<x[i].age<<endl; } cout<<"----------------"<<endl; //用结构指针输出结构数组的元素 for (p=x;p<=&x[2];p++) { cout<<p->name<<‘\t‘; cout<<p->sex<<‘\t‘; cout<<p->age<<endl; } system("pause"); }

     

    展开全文
  • 指向结构变量的指针: 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址 结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名 例如:...

    指向结构变量的指针 :

    一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址

    结构指针变量说明的一般形式为:
                 struct 结构名 *结构指针变量名

    例如:struct stu *pstu;

    赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量

    结构名类似类,而结构变量类似对象,结构名和结构变量是两个不同的概念,不能混淆

    例如:如果 boy是被说明为 stu 类型的结构变量,则:pstu=&boy

    有了结构指针变量,就能更方便地访问结构变量的各个成员。
    其访问的一般形式为:
           (*结构指针变量).成员名
    或为:
           结构指针变量->成员名

    例如:pstu->成员名

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    } boy1={102,"Zhang ping",'M',78.5},*pstu;
    main()
    {
    pstu=&boy1;//结构指针变量指向结构变量地址
    printf("Number=%d\nName=%s\n",boy1.num,boy1.name);
    printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
    printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
    printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);
    printf("Number=%d\nName=%s\n",pstu->num,pstu->name);
    printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);
    }

    结构变量.成员名
    (*结构指针变量).成员名
    结构指针变量->成员名
    这三种用于表示结构成员的形式是完全等效的。

    指向结构数组的指针:

    指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结
    构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地
    址。

    struct stu
    {
    int num;
    char *name;
    char sex;
    float score;
    }boy[5]={
    {101,"Zhou ping",'M',45},
    {102,"Zhang ping",'M',62.5},
    {103,"Liou fang",'F',92.5},
    {104,"Cheng ling",'F',87},
    {105,"Wang ming",'M',58},
    };
    main()
    {
    struct stu *ps;//定义结构指针变量
    printf("No\tName\t\t\tSex\tScore\t\n");
    for(ps=boy;ps<boy+5;ps++)//结构变量指针指向结构数组首地址
    printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);
    }

    结构指针变量作函数参数:

    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},
    };
    main()
    {
    struct stu *ps;//定义结构指针变量
    void ave(struct stu *ps);//定义函数原型
    ps=boy;//结构指针变量指向结构数组首地址
    ave(ps);//结构指针变量作为参数传递
    }
    void ave(struct stu *ps)
    {
    int c=0,i;
    float ave,s=0;
    for(i=0;i<5;i++,ps++)
    {
    s+=ps->score;
    if(ps->score<60) c+=1;
    }
    printf("s=%f\n",s);
    ave=s/5;
    printf("average=%f\ncount=%d\n",ave,c);
    }

    结构变量中的指针应该只用来在程序中管理那些已分配和在别处分配的字符串。如ps->name,该变量指针只是用来管理那些已分配内存的字符串。

    展开全文
  • 本题要求实现一个根据学生成绩设置其...其中p是指向学生信息的结构体数组的指针,该结构体的定义为: struct student{ int num; char name[20]; int score; char grade; }; n是数组元素个数。学号num、姓名n...
  • 就和普通指针一样使用,只不过它是结构体数组。 typedef struct Student {  char name[10] ;  int age ; }Student; #define LEN 10 //print all Student infomation void fun(Student *pStu,int ...
  • 设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。 【例11-6】用指针变量输出结构数组。 struct stu{
  • C语言指向结构体数组的指针

    万次阅读 2015-02-02 13:47:51
    设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。 【例11-6】用指针变量输出结构数组。 struct stu{ in
  • 设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。【例11-6】用指针变量输出结构数组。 1 struct stu 2 { 3...
  • c语言指向结构体的指针 指向C中结构数组的指针 (Pointer to Array of Structures in C) Like we have array of integers, array of pointers etc, we can also have array of structure variables. And to use the ...
  • 题目是这样:假设定义了一个指针数组tBooks如下,请定义一个指向的数组指针p,让程序可以顺利执行,并按要求打印出数据。 关键代码: char *tBooks[] = { "《数据结构》", "《计算机组成原理》", "...
  • 2. 指向一维数组的指针以及指针数组 3. 指向函数的指针 —— 1. 指向变量的指针/指针变量 2. 指向数组的指针/数组指针 3. 指向字符串的指针/字符指针 4. 指向函数的指针/函数指针 5. 指向结构体的指针/结构指针
  • 接下来我们来学习一下指向数组的指针以及数组名之间的区别与联系 解释:我们一再强调数组名就是元素的首地址,也就是数组加角标的形式,他本身就带着自己的首地址,这就相当于是我们去一个地方聚餐,第1种情况我们认
  • 数组名是指针,为什么sizeof(数组名)还是数组的大小 数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。...数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;指向数...
  • 指向数组的指针,与存储指针的数组 首先看int *p[4],“[]”的优先级别高,所以它首先是个大小为4的数组,即p[4];剩下的“int *”作为补充说明,即说明该数组的每一个元素为指向一个整型类型的指针。int *p[4]...
  • 可用指针指向结构类型数组元素,设pStudent为指向
  • 前言 学习K&...书中用到结构数组以及变式为指向结构的指针。 引入概念:结构数组,数组内的每个元素都是一个结构。 例如: struct key{ char *word; int count; }keytab [NKEYS]; 正文 结构数组...
  • 结构数组和结构指针

    2019-06-21 18:05:15
    a[0]),即指向数组的首地址。数组中的其他元素可以通过a的位移得到,此时的进阶是以数组中单个的元素类型为单位的,即a+i= & a[i]。 另外:(有关数组名取地址) &a代表的不是取a这个变量的地址,而是取...
  • 文章目录写在前面一、数组和指针基础知识(1)数组(2)指针二、数组和指针的基本操作(1)数组访问方式(2)指向指针的指针三、数组代码实现(c++)四、参考资料 写在前面 现代c++程序应尽量使用vector和迭代器类型...
  • <p>I would have expected this code to work: <pre><code>package main type Item struct { Key string Value string ... Values is a slice, list is an array....<p>...but either the answers are for a ...
  • 1.结构数组的三种定义: 2.结构数组初始化: 3.结构数组元素的引用: 4.结构指针指向结构变量: 指向结构数: 5.结构指针做函数参数: a.实参指针和形参指针指向同一个地址; b.对形参的修改直接影响到实参的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,182
精华内容 1,272
关键字:

指向结构数组的指针