精华内容
下载资源
问答
  • 在结构体内定义指针
    千次阅读
    2020-04-21 15:40:29

    常见到定义结构体时的指针定义形式,记录学习一下

    typedef struct {  
        int a;  
        double b;  
    }demo, *pdemo;    //typedef 了两个新的数据类型(结构体),其中一个是指针方式的名字  
      
      
    int main(void)  
    {      
        char i = 'y';  
        demo  a1;    //demo 声明的a1是一个实体,声明了就已经有存储空间了  
        pdemo  b1 = &a1;  //pdemo 声明的b1是一个指针(但这里不用加*号,因为pemp_i已经被指定为指针),它可以指向一个struct a 的实体。  
         a1.a++;      //a1的元素访问方式  实体方式  
         b1->a++;   //b1的访问方式  指针方式  
    }

     

    更多相关内容
  • 结构体指针定义及使用

    万次阅读 多人点赞 2017-06-15 13:00:29
    结构体指针一、先回顾一下结构体的定义及其使用: 1、结构体的定义形式如下: struct 结构体名 { 类型1 成员1; 类型2 成员2; … 类型n 成员n; }; 实例如下:struct stu { char* name; int age;...

    结构体指针

    一、先回顾一下结构体的定义及其使用:
    1、结构体的定义形式如下:
    struct 结构体名
    {
    类型1 成员1;
    类型2 成员2;

    类型n 成员n;
    };
    实例如下:

    struct stu
    {
    	char* name;
    	int age;
    	int num;
    };
    

    2、该结构体的使用范例如下所示:

    #include <stdio.h>
    #include <string.h>
    
    struct stu//定义一个结构体
    {
    	char* name;
    	//char name[10];
    	int age;
    	int num;
    };
    
    int main(void)
    {
    	struct stu s;//定义一个结构体变量s
    	s.name = "Bob";//给结构体变量s赋值
    	//strcpy(s.name,"Bob");//如果把name定义为一个数组则使用该语句赋值
    	s.age = 22;
    	s.num = 6;
    
    	printf("name=%s\n", s.name);//输出结构体变量s的内容
    	printf("age=%d\n", s.age);
    	printf("num=%d\n", s.num);
    
    	return 0;
    }
    

    二、结构体指针的定义及使用
    1、结构体指针的定义:
    struct 结构体名 *指针变量名;
    实例如下:

    struct stu//先定义一个结构体
    {
    	char* name;
    	int age;
    	int num;
    };
    
    struct stu s1,*s;//定义一个结构体变量和一个结构体指针
    

    2、该结构体的使用范例如下:

    #include <stdio.h>
    #include <string.h>
    
    struct stu//定义一个结构体
    {
    	char* name;
    	//char name[10];
    	int age;
    	int num;
    };
    
    int main(void)
    {
    	struct stu s1,*s;//定义一个结构体变量和一个结构体指针
    	s = &s1;//让指针s指向结构体变量s1,就是将s1的首地址赋予指针s
    	s->name = "Bob";//赋值
    	//strcpy(s->name,"Bob");//如果把name定义为一个数组则使用该语句赋值
    	s->age = 22;
    	s->num = 6;
    
    	printf("name=%s\n",s->name);//输出内容
    	printf("age=%d\n", s->age);
    	printf("num=%d\n", s->num);
    
    	return 0;
    }
    
    展开全文
  • c语言结构体内嵌结构体指针Prerequisite: 先决条件: Structures in C programming language. C编程语言中的结构。 Dynamic Memory allocation functions in C. C中的动态内存分配功能。 Example: In this ...

    c语言结构体内嵌结构体指针

    Prerequisite:

    先决条件:

    Example: In this tutorial, we will use a structure for “student”, structure members will be "name" (string type), "age" (integer type), "roll number" (integer type).

    示例:在本教程中,我们将为“学生”使用结构,结构成员将为“名称”(字符串类型),“年龄”(整数类型),“卷数”(整数类型)。

    结构声明 (Structure declaration)

        struct student{
    	    char name[50];
    	    int age;
    	    int rollno;
        };
    
    

    Here,

    这里,

    • struct is the keyword to define a structure.

      struct是定义结构的关键字。

    • student is the name of the structure.

      学生是结构的名称。

    • name is the first structure member to store age with maximum of 50 characters, age is second structure member to store age of the student, and rollno is the third structure member to store rol number of the student.

      name是存储年龄最多的50个字符的第一个结构成员, age是存储学生年龄的第二个结构成员, rollno是存储学生的编号的第三个结构成员。

    指向结构声明的指针 (Pointer to structure declaration)

        struct student *ptr;
    
    

    将内存分配给结构指针 (Allocating memory to the pointer to structure)

        ptr = (struct student*)malloc(sizeof(struct student));
    
    

    The statement will declare memory for one student’s record at run time. Read more about the dynamic memory allocation in C programming language.

    该语句将在运行时声明对一个学生的记录的记忆。 阅读有关C编程语言中动态内存分配的更多信息。

    使用指针访问结构成员 (Accessing structure members using pointer)

    The arrow operator (->) is used to access the members of the structure using pointer to structure. For example, we want to access member name, and ptr is the pointer to structure. The statement to access name will be ptr->name.

    箭头运算符 ( -> )用于使用指向结构的指针访问结构的成员。 例如,我们要访问成员名称 ,而ptr是指向structure指针 。 访问名称的语句将是ptr-> name 。

    指向结构的C程序 (C program for pointer to structure)

    #include <stdio.h>
    
    //structure definition
    struct student{
    	char name[50];
    	int age;
    	int rollno;
    };
    
    //main function
    int main(){
    	//pointer to structure declaration
    	struct student *ptr;
    	
    	//allocating memory at run time 
    	ptr = (struct student*)malloc(sizeof(struct student));
    	
    	//check memory availability
    	if( ptr == NULL){
    		printf("Unable to allocate memory!!!\n");
    		exit(0);
    	}
    	
    	//reading values of the structure
    	printf("Enter student details...\n");
    	printf("Name? ");
    	scanf("%[^\n]", ptr->name); //reads string with spaces
    	printf("Age? ");
    	scanf("%d", &ptr->age);
    	printf("Roll number? ");
    	scanf("%d", &ptr->rollno);
    	
    	//printing the details
    	printf("\nEntered details are...\n");
    	printf("Name: %s\n", ptr->name);
    	printf("Age: %d\n", ptr->age);
    	printf("Roll number: %d\n", ptr->rollno);
    	
    	//freeing dynamically allocated memory
    	free(ptr);
    	
    	return 0;
    }
    
    

    Output

    输出量

        Enter student details...
        Name? Amit shukla
        Age? 21
        Roll number? 100
    
        Entered details are...
        Name: Amit shukla
        Age: 21
        Roll number: 100
    
    
    

    翻译自: https://www.includehelp.com/c/pointer-to-structure.aspx

    c语言结构体内嵌结构体指针

    展开全文
  • 结构体中定义函数指针

    千次阅读 2019-09-03 09:55:54
    结构体指针变量的定义 定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量 ...形式2:在定义类型的同时定义变量 struct 结构体标识符 {  成员变量列表;… } *指针变量名;形式...

    结构体指针变量的定义

    定义结构体变量的一般形式如下:
    形式1:先定义结构体类型,再定义变量
    struct 结构体标识符
    {
      成员变量列表;…
    };
    struct 结构体标识符 *指针变量名;
    变量初始化:struct 结构体标识符 变量名={初始化值1,初始化值2,…,初始化值n };

    形式2:在定义类型的同时定义变量
    struct 结构体标识符
    {
      成员变量列表;…
    } *指针变量名;

    形式3:直接定义变量,用无名结构体直接定义变量只能一次
    struct
    {
      成员变量列表;…
    }*指针变量名;

    其中“指针变量名”为结构体指针变量的名称。形式1是先定义结构体,然后再定义此类型的结构体指针变量;形式2和形式3是在定义结构体的同时定义此类型的结构体指针变量。

    函数指针的定义
    一般的函数指针可以这么定义:
      int (*func)(int,int);    //这里的func只是一个函数指针变量
    表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针. 假如存在这样的一个函数:
    int add2(int x,int y)
    {
      return x+y;
    }
    那么在实际使用指针func时可以这样实现:
    func=&add2;  //指针赋值,或者func=add2; add2与&add2意义相同(函数名就是函数的地址)
    printf("func(3,4)=%d\n",func(3,4));

    事实上,为了代码的移植考虑,一般使用typedef定义函数指针类型.
    typedef int (*FUN)(int,int); //参考下面

    /* typedef int (*funcptr)(); 这个的意思是:定义一个返回值为int,不带参数的函数指针,
    就是说funcptr 是 int (*)()型的指针

    funcptr table[10]; 
    定义一个数组,这个数组是funcptr类型的。就是说这个数组内的内容是一个指针,这个指针指向一个返回值为int,不带参数的函数 */
    FUN func=&add2;
    func();

    结构体中包含函数指针
    其实在结构体中,也可以像一般变量一样,包含函数指针变量.下面是一种简单的实现

    #include <stdio.h>
    struct DEMO  
    {  
        int x,y;  
        int (*func)(int,int); //函数指针  
    };  
      
    int add1(int x,int y)  
    {  
        return x*y;  
    }  
    
    int add2(int x,int y)  
    {  
        return x+y;  
    }  
    
    void main()  
    {  
        struct DEMO demo;  
        demo.func=add2; //结构体函数指针赋值  
        //demo.func=&add2; //结构体函数指针赋值  
        printf("func(3,4)=%d\n",demo.func(3,4));  
        demo.func=add1;  
        printf("func(3,4)=%d\n",demo.func(3,4));  
    }
    执行后终端显示:
    func(3,4)=7 
    func(3,4)=12

    结构体中指向函数的指针

    C语言中的struct是最接近类的概念,但是在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。举个例子,如下:

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <string.h>  
          
    typedef struct student  
    {  
        int id;  
        char name[50];   
        void (*initial)();  
        void (*process)(int id, char *name);  
        void (*destroy)();  
    }stu;  
          
    void initial()  
    {  
        printf("initialization...\n");  
    }  
          
    void process(int id, char *name)  
    {  
        printf("process...\n%d\t%s\n",id, name);  
    }  
         
    void destroy()  
    {  
        printf("destroy...\n");  
    }  
          
    int main()  
    {  
        stu *stu1;  
        //在VC和TC下没有malloc也可以正常运行,但是linux gcc下就会出错,为段错误,必须使用malloc  
        stu1=(stu *)malloc(sizeof(stu));  
        //使用的时候必须要先初始化  
        stu1->id=1000;  
        strcpy(stu1->name,"C++");  
        stu1->initial=initial;  
        stu1->process=process;  
        stu1->destroy=destroy;  
        printf("%d\t%s\n",stu1->id,stu1->name);  
        stu1->initial();  
        stu1->process(stu1->id, stu1->name);  
        stu1->destroy();  
        free(stu1);  
        return 0;  
    }
    终端显示:
       C++
    initialization...
    process...
       C++
    destroy..

    c语言中,如何在结构体中实现函数的功能?把结构体做成和类相似,让他的内部有属性,也有方法,
    这样的结构体一般称为协议类,提供参考: 
    struct { 
      int funcid; 
      char *funcname; 
      int (*funcint)();   /* 函数指针 int 类型*/ 
      void (*funcvoid)();  /* 函数指针 void类型*/ 
    }; 
    每次都需要初始化,比较麻烦

    #include <stdio.h>  
          
    typedef struct  
    {  
        int a;  
        void (*pshow)(int);  
    }TMP;  
          
    void func(TMP *tmp)  
    {  
        if(tmp->a >10)//如果a>10,则执行回调函数。  
        {  
            (tmp->pshow)(tmp->a);  
        }  
    }  
          
    void show(int a)  
    {  
        printf("a的值是%d\n",a);  
    }  
          
    void main()  
    {
        TMP test;  
        test.a = 11;  
        test.pshow = show;  
        func(&test);  
    }  
    
    终端显示:
    a的值是11      
     
    /*一般回调函数的用法为: 
    甲方进行结构体的定义(成员中包括回调函数的指针) 
         
    乙方定义结构体变量,并向甲方注册, 
    甲方收集N个乙方的注册形成结构体链表,在某个特定时刻遍历链表,进行回调。 
    当函数指针做为函数的参数,传递给一个被调用函数, 
    被调用函数就可以通过这个指针调用外部的函数,这就形成了回调<p>一般的程序中回调函数作用不是非常明显,可以不使用这种形式</p><p>最主要的
    用途就是当函数不处在同一个文件当中,比如动态库,要调用其他程序中的函数就只有采用回调的形式,通过函数指针参数将外部函数地址传入来实现调
    用</p><p>函数的代码作了修改,也不必改动库的代码,就可以正常实现调用便于程序的维护和升级</p>*/

     

    展开全文
  • 主要介绍了详解C语言结构体中的函数指针,文中对函数指针的基本概念也有讲解,需要的朋友可以参考下
  • 结构体内嵌函数指针解析

    千次阅读 2018-06-16 22:14:01
    结构体内嵌函数指针定义 typedef struct Factory_s{//结构体内嵌函数指针 int (*init)(void);//函数指针 int (*produce)(int num); int (*consume)(int num); }Factory; 结构体内嵌函数指针的初始化 ...
  • 最近实验室的小伙伴们突然问我,在结构体内创建指针,如何开辟其内存大小,有种极其简单且易想到的方法,就是外部对其malloc空间,但是本文可以给出两种比较优雅的实现方式。 1.利用构造结构体构造函数实现 跟...
  • 首先让我们定义结构体:...定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员;[例7-2] 对指向结构体类型变量的正确使用。输入一个结构体类型变量的成员,并输出。复制代码代码如下:#inc...
  • 对C语言的易混淆概念,数组指针指针数组、函数指针指针函数、结构体指针结构体内指针函数几方面内容进行代码演示和分析。
  • -驱动程序编写结构体的一些基本用法形式1:先定义结构体类型,再定义变量形式2:在定义类型的同时定义变量形式3:直接定义变量,用无名结构体直接定义变量只能一次结构体指针在嵌入式Linux驱动中的典型应用linux...
  • 结构体指针变量的定义

    千次阅读 2020-04-07 17:57:34
    最近STM的GPIO结构体定义中看到源代码的时候,顺便复习下结构体指针变量的定义及typedef 的使用。 1.结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针...
  • 数据结构-指针和结构体

    千次阅读 2022-04-03 12:34:38
    首先看变量内存中的存储 有时候需要获取并使用程序运行中某个变量的内存地址,如何获取这个地址、如何存储这个地址? &取地址符,&a就是获得了a的地址 可以存储地址的变量称为指针变量。 指针看起来就是...
  •  C语言结构体对函数指针封装示例(面向对象思想写法) 1、示例: #include int i, j; struct DATE{ int year; char month; char data; char hour; char min; char sec; }; struct DATE date; struct str_...
  • 本篇文章主要讲解C++指针中的另一种使用方法—结构体指针的使用 一.C++结构体的定义及创建方式 1.结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构,比如学生结构体,整合...
  • 比如,STM32的RTC开发中,我们需要数据来表示日期和时间,这些数据通常是年、月、日、时、分、秒。如果我们不用结构体,那么就需要定义6个变量来表示。这样的话程序的数据结构是松散的,我们的数据结构最好是“...
  • 在结构体内定义字符指针 使用时,另外根据情况申请内存,如下: struct strData {  int nHead;  int nLen;  char *pt; }; strData data; data.pt = (char*)malloc(100); // 申请100个字节的空间 ...
  • 结构体中定义指针

    千次阅读 2013-11-05 11:51:14
    结构体指针变量的定义定义结构体变量的一般形式如下: 形式1:先定义结构体类型,再定义变量 struct结构体标识符 { 成员变量列表;… }; struct 结构体标识符 *指针变量名; 变量初始化一:struct结构体...
  • 结构体内指针变量的赋值

    万次阅读 2018-12-12 20:02:27
    问题描述  某结构体的定义如下: typedef struct {  int iAge; // 年龄  char szAddr1[100]; // 地址1  char *pszAddr2; // 地址2  char **pszAddr3; // 地址3 } T_Pe...
  • 结构体使用方法大全(定义,内存大小,初始化,结构数组,结构指针,位域,结构和联合体的嵌套,结构体包含函数指针) ​ “结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者...
  • 【 注】:讲下面的东西之前,先讲几个易错的东西,1.sizeof 这个东西看起来像是函数,其实不是就是一个运算符,求字节的。int a = sizeof(int);这里就求出来了int型占用的是4个字节(这里依据个人电脑版本不同会有...
  • 有这么一个结构体 ``` typedef struct imageBufferStruct { char *data_im; float *data_depth; }imageBuffer; ``` ...请问结构体内指针的容器怎么push_back类似的例子 谢谢大神给个链接例子
  • 1 定义结构体 struct Studet { char name[20]; int age; char gender[10]; int classId; }; //使用:struct Studet st; 也可以定义全局,与方法中使用的结构体类型一致,作用域不同 struct Studet { char name...
  • 指向结构体的指针在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子:typedef struct{char name[21];char city[21];char state[3];} Rec;typedef Rec *...
  • 定义自身类型的成员是不可以的 定义结构体时,是不可以定义自身类型的成员的。...但是可以定义该结构体类型的指针,因为指针在固定的平台上所占的内存大小是确定的! 定义成员函数时,结构体类型做函数参...
  • C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针定义类似其他基本数据类型的定义,格式如下struct 结构体名 * 指针名;比如:struct person{char[20] name; int ...
  • 结构体中定义一个函数指针

    千次阅读 2018-08-01 22:39:53
    #include &lt;stdio.h&gt; struct DEMO { int x,y; int (*func)(int,int); //函数指针 }; int add1(int x,int y) { return x*y; } int add2(int x,int y) { return x+y; } void m...
  • 1、前一篇文章中提到,尽量不要使用赋值操作符来操作结构体,这其中所涉及的便是结构体的深度拷贝。  对于下面这个例子:  struct teacher { char szName[24]; int age; double income; } 进行如下的操作...
  • 头文件中,函数指针定义在一个AD模块结构体中//-----------------------------------------------------------------------------typedef struct {???????????????????????????????? float VC1;??????????????????...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,115
精华内容 13,246
关键字:

在结构体内定义指针

友情链接: CHTMLTESTHTMLHtml.rar