zoukankan      html  css  js  c++  java
  • 结构体

    数据结构  最慢一星期一章   2015.10.5   一       2033    

    首先  我还不知道的一些基础知识

    结构体定义并不是定义一个变量,而是定义了一种数据类型,这种类型是你定义的,它可以和语言本身所自有的简单数据类型一样使用(如 int )

    函数参数是什么类型就传什么类型

    /*

    函数功能:定义一个结构体,在另一个函数中打印结构体成员的值;

    函数形参为结构体变量的函数使用void qq(struct book cc);

    */

    #include"stdio.h"

    struct book     //定义一个名为book的结构体

    {

     char name;

     int cose;

    };

    void qq(struct book cc);   //因为函数在主函数下面所以要声明一下函数

    void main()

    {

    struct book one;       //定义一个结构体名为book的结构体变量one

    one.cose=25;

    one.name=10;

     qq(one);

    }

    void qq(struct book cc)   //打印函数

    {

     printf("%d  ",cc.cose);

     printf("%d  ",cc.name);

    }

    有没有疑问为什么void qq(struct book cc) 里面的形参为struct book类型的参数,要和上面定义的结构体的类型一样 -struct book ccstruct book one; 

    问一个问题如何把一个结构体的变量的成员的信息copy到另一个结构体变量?

    #include"stdio.h"

    struct book     //定义一个名为book的结构体

    {

     char name;

     int cose;

    };

    void main()

    {

    struct book one;       //定义一个结构体名为book的结构体变量one

    struct book cc;        //定义一个结构体名为book的结构体变量cc

    one.cose=25; 

    one.name=10;

    cc=one;       //把变量one的成员copy到变量cc

    printf("%d  ",cc.cose);

     printf("%d  ",cc.name);

     }

    结构体变量为数组的结构体struct book shu[20];    //20本书 

    /*

    函数功能:结构体变量为数组的结构体

    */

    /*

    函数功能:结构体变量为数组的结构体

    */

    #include"stdio.h"

    struct book       //

    {

     int price;     //书的价格

    };

    void main()

    {

    struct book shu[20];    //20本书 

    shu[0].price=1;         //0的价格

    shu[1].price=2;         //1的价格

    shu[2].price=3;         //2的价格

    shu[3].price=4;         //3的价格

     printf("%d  ",shu[0].price);

     printf("%d  ",shu[1].price);

     printf("%d  ",shu[2].price);

     printf("%d  ",shu[3].price);

    }

    如果不用数组呢

    struct book shu0shu1shu2shu3。。。。。。。;//麻烦

    接着来

    数组形参

    数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。

       数组形参是个容易出问题的地方。因为对于C/C++新手而言,最大的惊讶是C++中根本不存在所谓的“数组形参”,因为数组在传入时,实质上只传入指向其首元素的指针。--来源于网络

    #include"stdio.h"

    int aa[2]={0,1};

    void test(int a[]); //形参为int*

    void main()

    {

     test(aa);

    }

    void test(int a[])

    {

     printf("%d  ",a[0]);

     printf("%d  ",a[1]);

    }

    这种从数组到指针的自动转换被赋予了一个迷人的技术术语:“退化”,即数组退化成指向其首元素的指针。顺便提及,同样的事情也发生在函数上。一个函数型参数会退化成一个指针。不过,和数组退化时丢失边界不同,一个退化的函数具有良好的感知能力,可以保持其参数类型和返回类型。

    由于在数组形参中数组边界被忽略了,因此通常在声明时最好将其省略。然而,如果函数期望接受一个指向一个元素序列(换句话说,就是数组)的指针作为参数,而不是指向单个对象的指针,那么最好这样声明:

    void test(int a[]); // 形参a仍然是一个int*-----来源于网络

    我也只是记下了就这样用,下面看结构体数组做函数参数

    #include"stdio.h"

    struct book       //

    {

     int price;     //书的价格

    };

    void qq(struct book cc[]);

    void main()

    {

    struct book shu[20];    //20本书 

    shu[0].price=1;         //0的价格

    shu[1].price=2;         //1的价格

    shu[2].price=3;         //2的价格

    shu[3].price=4;         //3的价格

     qq(shu);

    }

    void qq(struct book cc[])

    {

     printf("%d  ",cc[0].price);

     printf("%d  ",cc[1].price);

     printf("%d  ",cc[2].price);

     printf("%d  ",cc[3].price);

    }

  • 相关阅读:
    SQL的四种连接(内连接,外连接)
    MySQL连表操作之一对多
    [转]Mysql连表之多对多
    Hibernate笔记二
    Hibernate框架报错:org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.mikey.hibernate.domain.Person.pid
    Hibernate框架:org.hibernate.exception.SQLGrammarException: Cannot open connection at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java92)
    [转]网络编程三要素
    Hibernate笔记一
    JavaScript高级特征之面向对象笔记
    Myeclipse创建HTML文件中文显示乱码问题
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/4858993.html
Copyright © 2011-2022 走看看