精华内容
下载资源
问答
  • c语言中,结构体做参数调用例子结构体形参例子 typedef struct AnyscanFtStr { int StrID; int StrFaceStart; int StrFaceEnd; void (*StrRender)(int x, int y); }ANYSCAN_FT_STRING, *ANY

    c语言中,结构体做参数调用例子结构体形参例子

        typedef struct AnyscanFtStr
        {   
            int StrID;
            int StrFaceStart;
            int StrFaceEnd;
            void (*StrRender)(int x, int y);
        }ANYSCAN_FT_STRING, *ANYSCAN_FT_STRING_P;
    
        ANYSCAN_FT_STRING my_struct[10];
    
        void test_struct_param(ANYSCAN_FT_STRING_P urStruct)
        {
            urStruct->StrID=11;
            urStruct->StrFaceStart=55;
            urStruct->StrFaceEnd=9;
    
        }
    
        int main(int argc, char *argv[])
        {
            test_struct_param(&my_struct[0]);
    
            printf("ID : %d\n",my_struct[0].StrID);
            printf("StrFaceStart : %d\n",my_struct[0].StrFaceStart);
            printf("StrFaceEnd : %d\n",my_struct[0].StrFaceEnd);
    
            printf("ID 2 : %d\n",my_struct[1].StrID);
            printf("StrFaceStart 2 : %d\n",my_struct[1].StrFaceStart);
            printf("StrFaceEnd 2 : %d\n",my_struct[1].StrFaceEnd);
            return 0;
        }
    
    展开全文
  • 首先结构体做函数参数有三种传递方式 一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。 以传引用调用方式传递结构比用传值方式传递结构...
     首先结构体做函数参数有三种传递方式
    


    一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。


    以传引用调用方式传递结构比用传值方式传递结构效率高。以传值方式传递结构需要对整个结构做一份拷贝。 


    下面看一个列子,student结构体中包含该学生的各种信息,我们在change函数中对其进行部分修改,再在主函数中输出其结果


    1.下面传递结构体变量


    #include<stdio.h>
    #include<string.h>
    #define format "%d\n%s\n%f\n%f\n%f\n"
    struct student
    {
    int num;
    char name[20];
    float score[3];
    };
    void change( struct student stu );
    int main()
    {

    struct student stu;
    stu.num = 12345;
    strcpy(stu.name, "Tom");
    stu.score[0] = 67.5;
    stu.score[1] = 89;
    stu.score[2] = 78.6;
    change(stu);
    printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);
    printf("\n");
    return 0;
    }


    void change(struct student stu)
    {
    stu.score[0] = 100;
    strcpy(stu.name, "jerry");
    }




      可以看到最终输出的值并未改变。。。
    2.地址传递


    <span style="font-family:Arial Black;font-size:12px;">#include<stdio.h>
    #include<string.h>
    #define format "%d\n%s\n%f\n%f\n%f\n"
    struct student
    {
    int num;
    char name[20];
    float score[3];
    };
    void change( struct student* stu );
    int main()
    {

    struct student stu;
    stu.num = 12345;
    strcpy(stu.name, "Tom");
    stu.score[0] = 67.5;
    stu.score[1] = 89;
    stu.score[2] = 78.6;
    change(&stu);
    printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]);
    printf("\n");
    return 0;
    }


    void change(struct student* p)
    {
    p->score[0] = 100;
    strcpy(p->name, "jerry");
    }</span>


    可以看到,通过地址传递修改了结构体内的数据
    用&stu做实参,&stu是结构体变量stu的地址。在调用函数时将该地址传送给形参p(p是指针变量)。这样p就指向stu。


    在change函数中改变结构体内成员的值,在主函数中就输出了改变后的值


    3.结构体成员的地址传递和值传递


    这个类似于单一变量的传递,这里也没必要说了,当然是地址传递才能修改。






    把一个完整的结构体变量作为参数传递,要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针做函数参数比较好,能提高运行效率。
    展开全文
  • python调用dll, 复杂结构体做参数

    千次阅读 2014-08-07 16:55:17
    python调用dll时 ,结构体参数传递,需要字节对齐,弄了一下午,就快要放弃,最后终于OK 在此记录,以备后用。 最初尝试 继承ctypes.Structure。本地的是4个字节的对齐,python中用class方式无法指定对齐...

    python调用dll时 ,结构体参数传递,需要字节对齐,弄了一下午,就快要放弃,最后终于OK
    在此记录,以备后用。


    最初尝试 继承ctypes.Structure。本地的是4个字节的对齐,python中用class方式无法指定对齐方式,只能按照默认的对齐,正常的int,double,double 需要24 个字节,而我本地20个字节。 失败。

     

    最后尝试用 struct.pack 打包,成功。 哈哈哈

    本地结构体如下:
    //star
    #pragma pack(4)
    typedef struct tagGeoDatum
    {
     EllipseType Ellipse; //椭球类型 54 80
     double a;
     double f;
    }GeoDatum;

    typedef struct tagCoorSystemsEX
    {
     GeoDatum Datum;//基准面
     int nCoorSys; //坐标类型 投影类型
     int nCenterLongitude;//中央子午线
     int nBeltID;//带号
     float fYOffSet; //横向偏移
    }CoorSystemsEX;
    #pragma pack()
    //end

    需要给本地dll传递   CoorSystemsEX 指针。
    借鉴“http://blog.guozengxin.cn/python/2013/07/25/python-struct-pack-unpack/”

    python 代码如下:
    # star
    ss = struct.pack("=idd", 0x01000000, 6378137.23, 245.365);   
    ss1 = struct.pack("=20siiif",ss, 0x00020000, 108, 36,500000.0);
    # end

    此处 ss1 即可代表 CoorSystemsEX* 传递了

     


     

    展开全文
  • C++结构体参数与结构体指针参数区别Demo(资源包括C++源程序和编译好的exe文件)
  • C++结构体做函数参数

    2021-07-26 21:14:36
    结构体做函数参数 作用:将结构体作为参数向函数只能够传递 传递方式有两种: * 值传递 * 地址传递 代码示例: #include <iostream> #include <string> using namespace std; //定义学生结构体 struct ...

    结构体做函数参数

    作用:将结构体作为参数向函数只能够传递
    传递方式有两种:
    *
    值传递
    *
    地址传递

    代码示例:

    #include <iostream>
    #include <string>
    using namespace std;
    //定义学生结构体
    struct student
    {
           //姓名
           string name;
           //年龄
           int age;
           //分数
           int score;
    };
    //打印学生信息函数
    //1.值传递
    void printStudent1(struct student s)
    {
           s.age = 100;
           cout << "子函数中 姓名:" << s.name
                  << " 年龄:" << s.age
                  << " 分数:" << s.score << endl;
    }
    //地址传递
    void printStudent2(struct student *p)
    {
           p->age = 200;
           cout << " 子函数2中 姓名:" << p->name
                  << " 年龄:" << p->age
                  << " 分数:" << p->score << endl;
    }
    int main()
    {
           //结构体做函数参数
           //将学生传入到一个参数中,打印学生身上的所有信息
           //创建结构体变量
           struct student s;
           {
                  s.name = "张三";
                  s.age = 21;
                  s.score = 85;
                  //printStudent1(s);
                  printStudent2(&s);
                  cout << "main函数中打印 姓名:" << s.name
                         << " 年龄:" << s.age
                         << " 分数:" << s.score << endl;
           };
           return 0;
    }
    

    总结:如果不想修改主函数中的数据,用值传递,反之用地址传递

    展开全文
  • 1、结构体的成员作函数的参数。 与普通变量作函数参数的用法相同。值传送,不能修改实参的值。 2、结构体指针作函数的参数。 将结构体的地址传送给函数,效率高,可以修改实参的值。 3、结构体作函数的参数...
  • 结构体做函数参数

    万次阅读 2018-02-27 20:38:14
    结构体做函数参数 &lt;2&gt;结构体数组 &lt;3&gt;案例 从键盘获取数据,给结构体变量初始化,并且排序,打印结构体 《3》工程开发中,结构体应用常见的模型及典型的错误用...
  • 结构体类型 参数传递的是结构中所有成员的副本。 而 结构体指针类型 参数传递的是指向原结构体的指针。 代码 /* test3.c */ #include <stdio.h> struct data { int i; char *msg; }; void changeData1...
  • C++结构体作为参数Demo

    2019-04-30 22:41:57
    C++结构体作为参数Demo(资源包括C++源代码和编译好的exe文件)
  • VB和VC 结构体Dll参数传递,VB中的结构体作为参数,传递VC中的结构体dll
  • 2.结构体指针形参 实参传递结构体名地址 才是地址传递 #include<iostream> using namespace std; struct node { int age; node(){age=0;} node(int age){this->age=age;} }; void add1(node no){ ...
  • 作用:将结构体作为参数向函数中传递 传递方式: 值传递 地址传递 将学生传入到一个参数中,打印学生身上的所有信息 创建结构体变量 #include<iostream> #include<cstring> using namespace std; //1....
  • C++结构体结构体创建,结构体数组) 目录 C++结构体结构体创建,结构体数组) 1、结构体创建 2、结构体创建代码演示 3、结构体数组 4、结构体数组代码演示 1、结构体创建 struct结构体名 变量名 struct...
  • 结构体嵌套结构体 作用:结构体中的成员可以是另一个结构体 例如:每个老师辅导一个学员,一个老师的结构体中记录一个学生的结构体 示例: #include <iostream> #include <string> using namespace std;...
  • C结构体做函数参数

    2017-11-02 19:31:32
    C中,结构体作函数实参传递时,函数内部操作的是此结构体的所有成员的一份拷贝,所以对它们的修改不会改变原结构体的值
  • 深入理解C语言-结构体做函数参数

    千次阅读 2019-04-02 23:35:25
    结构体做函数参数,在C语言中属于常见现象,此时为了内存考虑,不传递结构体,而是传递结构体的地址 结构体定义 struct Man { char name[64]; int age; }; 结构体可以与typedef结合使用 typedef struct _Man { ...
  • 结构体参数

    2019-05-12 10:52:41
    1.用结构体变量作函数参数 2.用指向结构体变量的指针作实参在上面程序的基础上稍作修改即可 3.用结构体变量的引用作函数参数 4.总结 将一个结构体变量中的数据传递给另一个函数,有下列3种方法: 用结构体...
  • 结构体作为参数传递

    千次阅读 2013-05-13 22:52:52
    当用结构体指针做参数的时候。就应该用&来取出该结构体的地址, 才能使用。 2.当把就够体名作为参数的时候。如  #include struct name funds { /*建立结构体*/ char bank[10];  cahr name1[10]; ............
  • c语言结构体参数默认值

    千次阅读 2020-08-22 09:33:03
    c语言结构体参数默认值 c语言结构体的成员初始化 不同于c++具有构造函数,能够直接方便初始化的工具,c语言结构体成员初始化需要代码手动写入,比如下面这两种方式。 struct Member{ char* name; int age; char...
  • 主要介绍了用pybind11封装C++结构体作为参数的函数实现步骤,本文分步骤通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,303
精华内容 110,521
关键字:

结构体做参数