C语言/C++结构体疑问小结

1.关于结构体
情况一:最简单的结构体定义
struct stu{
	 char no[20];
	 float score;
	 int rank;
 };
关键字 struct 表明这是在定义一个结构体,stu是这种数据格式的名称,因此我们可以像使用char、int等创建变量一样使用stu创建stu类型的变量了。

情况二:附加"结构体变量”的初始化的结构体定义

struct stu{
	 char no[20];
	 float score;
	 int rank;
 }ShenQinghuai;

相当于

 struct stu{
	 char no[20];
	 float score;
	 int rank;
 };
 struct stu ShenQinghuai;

定义结构后,就可以创建这种类型的变量了:stu s1; stu s2;等。

注意:如果是C语言编程应该这样定义struct stu stu3C++允许在声明结构体时省略关键字struct,而C不可以。

情况三:仅需要使用一次变量的结构体定义

举例来讲,只需要使用一个学生信息的时候,可以省略结构体名称。

 struct{
	 char no[20];
	 float score;
	 int rank;
 };
 struct stu ShenQinghuai;

此时,不能再用这个结构体再定义新的学生结构体变量。

1.1 结构体变量初始化的几种方法

情况一:声明时直接初始化

#include<stdio.h>
#include<stdlib.h>
#include"stdafx.h"
#include<iostream>
using namespace std;

 struct stu{
	 char no[20];
	 float score;
	 int rank;
 };
 struct stu ShenQinghuai={"8Y5838a7",85.5,4};

 void main(){
	 cout<<ShenQinghuai.no<<"\t"<<ShenQinghuai.score<<"\t"<<ShenQinghuai.rank<<endl;
	 system("pause");
 }

定义的struct结构体变量可以通过成员运算符(.)来访问各个成员。

注:1.C++11允许如下初始化方式:stu stu3 {"8Y5838a7",85.5,4}; 即省略等号(=)。

       2.如果大括号内未包含任何内容,如:stu stu3 {},则各个成员将被初始化为0,且stu3.no每个字节被初始化为0。

情况二:结构体数组初始化

可以创建元素为结构体的数组,如:stu stud[10],这样stud就是一个stu数组,其每一个元素(stud[0], stud[1]等)都是stu对象.

结构体数组的初始化:

#include<stdio.h>
#include<stdlib.h>
#include"stdafx.h"
#include<iostream>
using namespace std;
struct stu{
	 char no[20];
	 float score;
	 int rank;
 };
struct stu xinxi[3]={{"130928336",85.5,4},{"130928337",90,3},{"130928338",73,5}};

 void main(){
	 int i;
	 for(i=0;i<3;i++){
	 cout<<xinxi[i].no<<"\t"<<xinxi[i].score<<"\t"<<xinxi[i].rank<<endl;
	 }
	 system("pause");
 }

输出结果如下:


或可使用单个赋值(一般在读取文件时常用)

xinxi[0]={"130928336",85.5,4};
#include<stdio.h>
#include<stdlib.h>
#include"stdafx.h"
#include<iostream>
using namespace std;

 struct test{ 
    int a[3]; 
    int b; 
}; 
//对于数组和变量同时存在的情况,有如下定义方法: 
struct test student[3] ={{{66,77,55},1},{{44,65,33},2},{{46,99,77},3}}; 

 void main(){
	 int i;
	 for(i=0;i<3;i++){
	 cout<<student[i].a[0]<<"\t"<<student[i].a[1]<<"\t"<<student[i].a[2]<<"\t"<<student[i].b<<endl;
	 }
	 system("pause");
 }

2.关于typedef(用于C语言)

C语言中的结构体可以简化成不用加struct

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

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

1)定义结构类型

  struct tagMyStruct 
  { 
  int iNum; 
  long lLength; 
  }; 

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

typedef struct tagMyStruct MyStruct; 

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

3)规范做法:

  struct tagNode 
  { 
  char *pItem; 
  struct tagNode *pNext; 
  }; 
  typedef struct tagNode *pNode; 

具体可见 http://blog.csdn.net/u012966194/article/details/52954613

附件1:各种数据类型的缺省值

数据类型            缺省初始化值
 
 int                    0
 char                '\0x0'
 float                 0.0
 double                0.0
 char Array[n]         ""
 int Array[n]        {0,0,…,0}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值