我首先想到的去MSDN上看看sturct到底是什么东西,虽然平时都在用,但是每次用的时候都搞不清楚到底这两个东西有什么区别,既然微软有MSDN,我们为什么不好好利用呢,下面是摘自MSDN中的一段话:

The struct keyword defines a structure type and/or a variable of a structure type. A structure type is a user-defined composite type. It is composed of "fields" or "members" that can have different types.In C++, a structure is the same as a class except that its members are public by default.In C, you must explicitly use the structkeyword to declare a structure. In C++, this is unnecessary once the type has been defined.You have the option of declaring variables when the structure type is defined by placing one or more comma-separated variable names between the closing brace and the semicolon.

从上面这段话中我们知道在c++中struct和typedef struct的用法基本没有区别了。下面是代码:

#include<iostream>
using namespace std; struct PERSON /* Declare PERSON struct type */
{
int age; /* Declare member types */
long ss;
float weight;
char name[];
} family_member; /* Define object of type PERSON,定义一个PERSON类型的对象family_member,定义对象并不占用内存。*/ /* Structure variables can be initialized. The initialization for each variable must be enclosed in braces. */
/* 这表示在C++中struct其实就是一个类,只不过这个类中的默认访问属性是public类型的,而在c++中默认访问类型是private的 */ struct POINT /* Declare POINT structure */
{
int x; /* Define members x and y */
int y;
} spot = { , }; /* Variable spot has values x = 20, y = 40,定义对象后马上初始化,这时候分配内存 */ struct POINT there; /* Variable there has POINT type */ int main()
{ struct PERSON sister; /* C style structure declaration,C语言风格第一一个PERSON类型的对象sister */
PERSON brother; /* C++ style structure declaration,而在C++中我们已经没有必要加上关键字struct了,
直接用结构体类型PERSON定义对象brother */ sister.age = ; /* assign values to members */
brother.age = ;
family_member.age=; /* 在创建结构体的时候就定义了的对象 */
there.x=spot.x;
POINT p;
p.y=spot.y; cout<<sister.age<<" "<<brother.age<<endl;
cout<<family_member.age<<endl;
cout<<spot.x<<" "<<spot.y<<endl;
cout<<there.x<<" "<<p.y<<endl; return ;
}

下面介绍在c语言中的用法

typedef与结构结合使用:

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

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

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

struct tagMyStruct

 int iNum; 
 long lLength; 
};

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

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

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

typedef struct tagMyStruct MyStruct;

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

备注 :本文章转自于:http://blog.csdn.net/xw13106209/article/details/4967689 ,在此感谢他的精彩分享!

struct和typedef struct的用法的更多相关文章

  1. [转载]彻底弄清struct和typedef struct

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  2. struct和typedef struct彻底明白了

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  3. struct和typedef struct

    转自:http://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++ ...

  4. 细说 struct和typedef struct

    细说 struct和typedef struct 参考原文:http://www.cnblogs.com/qyaizs/articles/2039101.html,有些小改动~ 1 首先://注意在C ...

  5. C++/C中的struct和typedef struct用法和区别

    struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...

  6. struct和typedef struct用法

    参考:http://www.cnblogs.com/qyaizs/articles/2039101.html C语言: typedef struct Student{ int score; }Stu; ...

  7. struct和typedef struct在c++中的用法

    #include<iostream> using namespace std; struct test{ int a; }test; //定义了结构体类型test,声明变量时候直接test ...

  8. struct和typedef struct在c语言中的用法

    在c语言中,定义一个结构体要用typedef ,例如下面的示例代码,Stack sq:中的Stack就是struct Stack的别名. 如果没有用到typedef,例如定义 struct test1 ...

  9. struct 和typedef struct的区别

    和int char一样struct也是一种数据类型,也可以声明变量--结构变量. 定义结构体变量的一般格式为: struct 结构名 { 类型 变量名; 类型 变量名; ... }结构变量; 另一种常 ...

随机推荐

  1. Excel2003读取sqlserver数据库表数据(图)

  2. Greenplum 数据库架构分析

    Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...

  3. js~this的陷阱

    在JS中,当前对象一般用this表示,在jquery中,当前的对象是用$(this)表示,这些都是最基础的知识,没什么可说的,但我要说的是,当this出现在某个深度时,它的含义你自己要清楚,它是指离当 ...

  4. Eclipse导入Gradle时报错:SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable

    百度查到http://stackoverflow.com/questions/19794200/gradle-android-and-the-android-home-sdk-location 按照其 ...

  5. poj2586 Y2K Accounting Bug(贪心)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=2586 ------ ...

  6. jquery自定义插件来实现分页的效果

    本节将介绍如何定义自己的jquery插入,实现分页效果,话不多说,.看看达到的效果: 分页插件 实现的代码例如以下: <!DOCTYPE HTML PUBLIC "-//W3C//DT ...

  7. Linux基础系列—Linux内核源码目录结构

    /** ****************************************************************************** * @author    暴走的小 ...

  8. ACM vim配置

    ACM现场赛时用的,比较简短,但是主要的功能都有了. 直接打开终端输入gedit ~/.vimrc 把下面的东西复制到里面就行了. filetype plugin indent on colo eve ...

  9. Centos ssh 登陆乱码解决办法

    1.vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030"LANGUAGE="zh_CN.GB18030:zh_CN.GB23 ...

  10. Android内存泄漏的各种原因详解

    转自:http://mobile.51cto.com/abased-406286.htm 1.资源对象没关闭造成的内存泄漏 描述: 资源性对象比如(Cursor,File文件等)往往都用了一些缓冲,我 ...