zoukankan      html  css  js  c++  java
  • 定义struct类型

    看下下面的代码:

    typedef struct tagUser
    {
    char* pItem;
     
    short Age;
    tagUser* pNext;
    }User;

    typedef: 定义一个新类型或为一类型起个别名。

    struct: 表示为一结构体类型.

    tagUser:类型名称。以后可以以此类型声明变量,如 tagUser myUser;

    User: 类型 tagUser的别名,即它们是同种类型,可以这样声明一变量: User myuser;

    我们在User类型的结构体内会看到pNext的指针,它指向下一个本类型的地址,它的类型为struct  tagUser,即我们所说的链表。

    .

    如果我们变成以下代码

       

    typedef struct tagUser
    {

    char* pItem;
    short Age;
    User
    * pNext;  // 此处错误
    }User;

    你再编译一下,会发现编译器给出出错提示,为什么?

     因为在User* pNext处时,User这个类型的声明还不存在,故出错,但把User变为struct tagUser或tabUser就可以了,因为之前已声明了。

    如果不用typedef,则只是声明一个类型即:

      

     struct tagUser
    {
    char* pItem;
    short Age;
    struct tagUser* pNext;
    }User;

    此时的User不是类型而是一个 tagUser类型的一个变量。

     如:User.pItem=0;
          User.Age=20;
          User.pNext=0;

    如果再声明一个此结构的变量 则为: tagUser Another; Another为变量。

    以上用typedef声明类型也可以用以下格式:

      1.

    typedef struct tagUser User;
    struct tagUser
    {
    char *pItem;
    short Age;
    User
    * pNext; //用到了User关键字
    };

     2.

      

    typedef struct tagUser
    {
    char *pItem;
    short Age;
    struct tagUser* pNext; //与1的区别
    }User;

    通常的格式为:

      

     struct tagUser
    {
    char *pItem;
    short Age;
    struct tagUser* pNext;
    };

    typedef
    struct tagUser User;

    struct的初始化:

       如:

     

    tagUser myuser=
    {
    NULL,
    50,
    NULL
    };

    如果要得到某项的值,可用myuser.Age得到, .号为域操作符。



  • 相关阅读:
    从‘void*’到‘int’的转换损失精度
    ../lib//libscsdblog.so: undefined reference to `pthread_atfork'
    使用Crypto++库的CBC模式实现加密
    VIM常用命令
    mysql bin-log三种模式
    windows64位Oracle安装和PL/SQL配置
    Maven项目中突然找不到Build Path或maven dependencies library
    org.springframework.beans.factory.config.MethodInvokingFactoryBean的使用
    使用Spring的StingUtils的commaDelimitedListToStringArray来获取字符串数组
    Spring注入
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/2160410.html
Copyright © 2011-2022 走看看