精华内容
下载资源
问答
  • struct typedef

    2020-01-23 22:06:10
    struct 结构体也是一种数据类型,它可以包含多个其他类型的数据。结构体可以包含多个基本类型的数据,也可以包含其他结构体,我们将它称为复杂数据类型或着构造数据类型。 结构体变量 ...struct s...

    struct

    摘自C语言中文网

    结构体也是一种数据类型,它可以包含多个其他类型的数据。结构体可以包含多个基本类型的数据,也可以包含其他结构体,我们将它称为复杂数据类型或着构造数据类型

    结构体变量
    struct stu {
       string name;
       int num;
       int age;
    };
    
    struct stu stu1, stu2;
    

    也可以在定义结构体的同时定义结构体变量:

    struct stu {
    	string name;
    	int num;
    	int age;
    } stu1, stu2;
    

    这样书写简单,但是因为没有结构体名,后面就没法用该结构体定义新的变量。

    需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含实实在在的数据,需要内存空间来存储。

    typedef

    整理自艾斯曼的博客

    首先与#define的区别

    #define:
    #表示这是一条预处理命令。
    例如:
    #define M (a+b)
    在对源程序编译时,首先在预处理中进行宏代换,用(a+b)置换所有宏名M,然后在进行编译。

    typedef
    typedef是在编译时被解释,让编译器来应付超越预处理器能力的文本替换。

    替换
    typedef  char* STR;
    STR str1, str2;
    
    结合struct
    struct stu {
    	string name;
    	int no;
    	int age;
    };
    struct stu stu1;
    
    // 等同于
    
    typedef struct stu {
    	string name;
    	int no;
    	int age;
    }STU;
    STU stu1;
    
    展开全文
  • structtypedef struct

    2017-09-21 12:06:45
    structtypedef struct彻底明白了 structtypedef struct 分三块来讲述:  1 首先://注意在C和C++里不同  在C中定义一个结构体类型要用typedef:  typedef struct Student  {  int a;  }...

    struct和typedef struct彻底明白了

    struct和typedef struct

    分三块来讲述:
      1 首先://注意在C和C++里不同
        在C中定义一个结构体类型要用typedef:
        typedef struct Student
        {
        int a;
        }Stu;
        于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
        这里的Stu实际上就是struct Student的别名。Stu==struct Student
        另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
        typedef struct
        {
        int a;
        }Stu;
        但在c++里很简单,直接
        struct Student
        {
        int a;
        };    
        于是就定义了结构体类型Student,声明变量时直接Student stu2;
    ======================================================================================

      2.其次:
        在c++中如果用typedef的话,又会造成区别:
        struct   Student   
        {   
        int   a;   
        }stu1;//stu1是一个变量  

     
        typedef   struct   Student2   
        {   
        int   a;   
        }stu2;//stu2是一个结构体类型=struct Student  

     
        使用时可以直接访问stu1.a
        但是stu2则必须先   stu2 s2;
        然后               s2.a=10;
    ======================================================================================

      3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
        如果在c程序中我们写:
        typedef struct  
        {
        int num;
        int age;
        }aaa,bbb,ccc;
        这算什么呢?
        我个人观察编译器(VC6)的理解,这相当于
        typedef struct  
        {
        int num;
        int age;
        }aaa;
        typedef aaa bbb;
        typedef aaa ccc;
        也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

        //此处不是很理解。

       

     

     

        typedef struct和struct的区别:

     

     

        typedef struct tagMyStruct
        { 
         int iNum;
         long lLength;
        } MyStruct;

        上面的tagMyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。

     

     

        这语句实际上完成两个操作:

          1) 定义一个新的结构类型

        struct tagMyStruct
        {   
         int iNum; 
         long lLength; 
        };

      分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedefstruct 关键字和tagMyStruct一起,构成了这个结构类型,这个结构都存在。

      我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

      2) typedef为这个新的结构起了一个名字,叫MyStruct。

        typedef struct tagMyStruct MyStruct;

      因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

      2.

        typedef struct tagMyStruct
        { 
         int iNum;
         long lLength;
        } MyStruct;

        在C中,这个申明后申请结构变量的方法有两种:

        (1)struct tagMyStruct 变量名

        (2)MyStruct 变量名

        在c++中可以有

        (1)struct tagMyStruct 变量名

        (2)MyStruct 变量名

        (3)tagMyStruct 变量名

     

    展开全文
  • structtypedef struct

    2017-09-21 12:48:58
    structtypedef struct 分三块来讲述:  1 首先://注意在C和C++里不同  在C中定义一个结构体类型要用typedef:  typedef struct Student  { ...(如果没有typedef就必须用struct Student s

    struct和typedef struct

    分三块来讲述:
      1 首先://注意在C和C++里不同
        在C中定义一个结构体类型要用typedef:
        typedef struct Student
        {
        int a;
        }Stu;
        于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明)
        这里的Stu实际上就是struct Student的别名。Stu==struct Student
        另外这里也可以不写Student(于是也不能struct Student stu1;了,必须是Stu stu1;)
        typedef struct
        {
        int a;
        }Stu;
        但在c++里很简单,直接
        struct Student
        {
        int a;
        };    
        于是就定义了结构体类型Student,声明变量时直接Student stu2;
    ======================================================================================

      2.其次:
        在c++中如果用typedef的话,又会造成区别:
        struct   Student   
        {   
        int   a;   
        }stu1;//stu1是一个变量  

     
        typedef   struct   Student2   
        {   
        int   a;   
        }stu2;//stu2是一个结构体类型=struct Student  

     
        使用时可以直接访问stu1.a
        但是stu2则必须先   stu2 s2;
        然后               s2.a=10;
    ======================================================================================

      3 掌握上面两条就可以了,不过最后我们探讨个没多大关系的问题
        如果在c程序中我们写:
        typedef struct  
        {
        int num;
        int age;
        }aaa,bbb,ccc;
        这算什么呢?
        我个人观察编译器(VC6)的理解,这相当于
        typedef struct  
        {
        int num;
        int age;
        }aaa;
        typedef aaa bbb;
        typedef aaa ccc;
        也就是说aaa,bbb,ccc三者都是结构体类型。声明变量时用任何一个都可以,在c++中也是如此。但是你要注意的是这个在c++中如果写掉了typedef关键字,那么aaa,bbb,ccc将是截然不同的三个对象。

        //此处不是很理解。

       

     

     

        typedef struct和struct的区别:

     

     

        typedef struct tagMyStruct
        { 
         int iNum;
         long lLength;
        } MyStruct;

        上面的tagMyStruct是标识符,MyStruct是变量类型(相当于(int,char等))。

     

     

        这语句实际上完成两个操作:

          1) 定义一个新的结构类型

        struct tagMyStruct
        {   
         int iNum; 
         long lLength; 
        };

      分析:tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,不论是否有typedefstruct 关键字和tagMyStruct一起,构成了这个结构类型,这个结构都存在。

      我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。

      2) typedef为这个新的结构起了一个名字,叫MyStruct。

        typedef struct tagMyStruct MyStruct;

      因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

      2.

        typedef struct tagMyStruct
        { 
         int iNum;
         long lLength;
        } MyStruct;

        在C中,这个申明后申请结构变量的方法有两种:

        (1)struct tagMyStruct 变量名

        (2)MyStruct 变量名

        在c++中可以有

        (1)struct tagMyStruct 变量名

        (2)MyStruct 变量名

        (3)tagMyStruct 变量名

     

    展开全文
  • #define dPS struct s * typedef struct s * tPS

    千次阅读 2014-08-04 19:32:02
     typedef struct s * tPS;  以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。哪种方法更好呢?(如果有的话)为什么?  这是一个非常微妙的问题,任何人答对这个问题(正当的原因)是...

    #define dPS struct s * 

    dps p1,p2

     typedef struct s * tPS;   

    tps p3,p4

    比较两者的异同点

    以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。  
    但只有typedef实现了目的。
    第一个扩展为  struct s * p1, p2;  

    上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。


    2.设有如下定义char *aa[2]={"abcd","ABCD"};则以下说法正确的是(D)

    A)aa数组的元素的值分别是“abcd”和“ABCD”。

    B)aa是指针变量,它指向含有两个数组元素的字符型一维数组。

    C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址。

    D)aa数组的两个元素中各自存放了字符'a'和'A'的地址。

    b不是两个数组元素,c存放的应该是5个字符,不是4个字符  

    数组指针

      一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。
      二:数组指针:是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个针。 

    指针数组

        一个数组,若其元素均为指针类型数据,称为指针数组。 也就是说,指针数组中每一个元素都相当于一个指针变量。其详细形式应该如下: *a[0], ...*a[n]. 每一个数组里面存储的是其指向的地址;一维指针数组的定义形式为:类型名 *数组名[数组长度]
    例如:int *p[4],由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示此数组是指针类型的,每个数组元素都指向一个整型变量。只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址
     

    程序如下

    #include<stdio.h>

    #include<string.h>
    int main()
    {
    char *aa[2]={"abcd","ABCD"};


    printf("%s\n",aa[0]);
    printf("%c\n",*aa[0]);
    printf("%c\n",*aa[1]);
     
      char s[5]="abcd" ;
    return 0;
    }

    输出结果:

    abcd

    a

    A
    Press any key to continue



    展开全文
  • structtypedef struct

    2017-07-12 21:07:32
    structtypedef struct 分三块来讲述:  1.首先://注意在C和C++里不同  在C中定义一个结构体类型要用typedef:  typedef struct Student {  int a;  }Stu;  于是在声明变量的时候就可:Stu stu1;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,159
精华内容 3,263
关键字:

sstructtypedef