typedef struct 用法详解_typedef struct的用法-程序员宅基地

技术标签: struct  扩展  语言  c  编译器  office  

分三块来讲述:
1首先:
在C中定义一个结构体类型要用typedef:
typedef struct Student (key)
{
int a;
}Stu;
于是在声明变量的时候就可:Stustu1;
如果没有typedef就必须用struct Studentstu1;来声明
这里的Stu实际上就是struct Student的别名。
另外这里也可以不写Student(于是也不能struct Student 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是一个结构体类型
使用时可以直接访问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将是截然不同的三个对象。

第四篇:C/C++中typedef struct和struct的用法

struct _x1 { ...}x1;和typedef struct _x2{ ...} x2;有什么不同?
其实,前者是定义了类_x1和_x1的对象实例x1,后者是定义了类_x2和_x2的类别名x2 ,
所以它们在使用过程中是有取别的.请看实例1.
[知识点]
结构也是一种数据类型,可以使用结构变量,因此,象其它 类型的变量一样,在使用结构变量时要先对其定义。
定义结构变量的一般格式为:
struct结构名
{
类型 变量名;
类型 变量名;
...
}结构变量;
结构名是结构的标识符不是变量名。


另一种常用格式为:
typedef struct结构名
{
类型 变量名;
类型 变量名;
...
}结构别名;

另外注意:在C中,struct不能包含函数。在C++中,对struct进行了扩展,可以包含函数。
======================================================================
实例1: struct.cpp
#include <iostream>
using namespace std;
typedef struct _point{
int x;
int y;
}point; //定义类,给类一个别名

struct _hello{
int x,y;
} hello; //同时定义类和对象

int main()
{
point pt1;
pt1.x = 2;
pt1.y = 5;
cout<< "ptpt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl;
//hello pt2;
//pt2.x = 8;
//pt2.y =10;
//cout<<"pt<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><?xml:namespace prefix = st1 />2.x="<< pt2.x <<"pt2.y="<<pt2.y <<endl;
//上面的hello pt2;这一行编译将不能通过.为什么?
//因为hello是被定义了的对象实例了.
//正确做法如下:用hello.x和hello.y
hello.x = 8;
hello.y = 10;
cout<< "hellohello.x=" << hello.x << "hello.y=" <<hello.y <<endl;
return 0;
}

第五篇:问答

Q:用struct和typedef struct定义一个结构体有什么区别?为什么会有两种方式呢?

struct Student
{
int a;
} stu;
typedef struct Student2
{
int a;
}stu2;

A:

事实上,这个东西是从C语言中遗留过来的,typedef可以定义新的复合类型或给现有类型起一个别名,在C语言中,如果你使用
struct xxx
{
};的方法,使用时就必须用struct xxx var来声明变量,而使用
typedef struct
{
}的方法 就可以写为xxx var;
不过在C++中已经没有这回事了,无论你用哪一种写法都可以使用第二种方式声明变量,这个应该算是C语言的糟粕。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dongqinliuzi/article/details/8093806

智能推荐

[已更新]Cisco Packet Tracer 注册、中文、软件下载问题_ciscopacket tracer注册码-程序员宅基地

文章浏览阅读1.5w次,点赞7次,收藏35次。#这个是一个废话吗?你觉得可以直接跳过。因为教学原因,我必须要去学会使用Cisco Packet Tracer基本功能。之前有一些布置路由器的经验,让我觉得布置路由器可以在这个软件很好的学习一下,来提高自己的能力和减少一些错误。但是很糟糕的是一开始我就遇到了语言不通等头痛事情,我需要花些时间去解决。下面是我通过一些实践获得经验,仅供参考。软件的下载软件我下载的是7.1版本,至于为什么下载汉化..._ciscopacket tracer注册码

CSS选择器_css选择器有_______a属性选择器b伪类选择器c通用兄弟元素选择器d否定选择器-程序员宅基地

文章浏览阅读5.2k次,点赞30次,收藏104次。根据W3C定义CSS3 选择器:在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。基础选择器层次选择器伪类选择器伪元素选择器属性选择器【基础选择器】元素选择器(选择元素名) \ 如:p{color:red;}ID选择器(#号+ID名)\ 如:#csdn{color:black;}类选择器(.+class名) \ 如..._css选择器有_______a属性选择器b伪类选择器c通用兄弟元素选择器d否定选择器

【Web前端面试】葵花宝典(2022版本)——Vue篇_vue面试题葵花宝典-程序员宅基地

文章浏览阅读4.8k次,点赞106次,收藏195次。你还在担心面试不过嘛?面试题找不到,小编特意整理了30+道高频前端面试题,送给大家,希望大家都能顺利通过面试,拿下高薪,也可持续关注本面试题专栏。本篇文章主要写的是面试题中的Vue篇,之后会更新前端其他方面相关面试题。........................_vue面试题葵花宝典

【转】CAN总线学习笔记(3)- CAN协议错误帧_如何模拟发送错误帧报文-程序员宅基地

文章浏览阅读748次。依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!1 错误帧的帧结构在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。错误帧由错误标志和错误界定符两个部分组成。主动错误标志:6个连续的显性位; 被动错误标志:6个连续的隐性位; 错误界定符:8个连续的隐性位。可以看到在错误标志之后还有0~6位的错误标志重叠,这一段最低有0个位,最多有6个位,关_如何模拟发送错误帧报文

android控件的绘制过程_android调用控件的()方法绘制控件的界面-程序员宅基地

文章浏览阅读795次。http://blog.csdn.net/qinjuning/article/details/7110211/_android调用控件的()方法绘制控件的界面

重启服务器之后的 502 Bad Gateway_网站502bad重启服务器可以吗-程序员宅基地

文章浏览阅读6.4k次。服务器重启之后,出现502 Bad Gateway_网站502bad重启服务器可以吗

随便推点

Java命令行_java(tm) se runtime environment (build 1.7.0_80-b1-程序员宅基地

文章浏览阅读465次。Ubuntu下。我在/home/sen/JavaProgram 下写了CommandLine.javapublic class CommandLine { public static void main(String args[]){ for(int i=0; i

Unity3D游戏开发中100+效果的实现和源码大全 - 收藏起来肯定用得着_unity 特效100-程序员宅基地

文章浏览阅读6.6k次,点赞27次,收藏323次。绝对干货,请收藏以让自己觉得已掌握需要时随时查阅,请点击在看及转发到朋友圈以在朋友圈装逼帮助更多的朋友!感谢各位一直以来的关注与支持!我们的公众号Unity3D游戏开发精华教程干货(u3dnotes)从发布第一篇技术干货文章到今天已经差不多3年了,期间不间断更新了技术干货文章560余篇,范畴涵盖使用Unity3D进行游戏、VR/AR/MR等XR开发及应用开发各方面,范围包括:Unity3D各种效果的Shader等实现、Shader等Unity3D图形渲染知识、骨骼动画和物理等Uni..._unity 特效100

Redis cluster集群:原理及搭建_--enable-redis-cluster-程序员宅基地

文章浏览阅读181次。1.为什么使用redis?redis是一种典型的no-sql 即非关系数据库 像python的字典一样 存储key-value键值对 工作在memory中所以很适合用来充当整个互联网架构中各级之间的cache 比如lvs的4层转发层 nginx的7层代理层尤其是lnmp架构应用层如php-fpm或者是Tomcat到mysql之间 做一个cache 以减轻db的压力因为有相当一部分的..._--enable-redis-cluster

【STM32】keil5兼容打开keil4工程_keil5打开keil4工程-程序员宅基地

文章浏览阅读1.2k次。keil5兼容打开keil4工程。可以通过安装兼容包解决。_keil5打开keil4工程

ADSL上网TP-LINK路由器设置方法_tplik modem.net-程序员宅基地

文章浏览阅读1.2k次。最后由 Lulu 于 2011-04-14 17:31:22 修改TP-LINK路由器 PPPOE拨号方式路由器操作指南首先把路由器的WAN口和Modem的LAN口连接起来,电脑网卡连接路由器任意一个LAN口;如果是网线到家,就直接把网线接到路由器WAN口。 然后为电脑设置网络参数,指定IP地址,如果电脑不多的话,建议用户手动指定IP地址。若路由器为默认设置,那么主_tplik modem.net

【附源码】跨界救场:如何用纯前端的方式获取视频首帧-程序员宅基地

文章浏览阅读1.4k次。背景最近在搬砖时遇到一个问题,在商详页面有些商品只有视频,没有封面图。我们的交互是用户点击视频封面图调用 native 播放器播放视频,没有封面图视频就没有了载体,就不能展示了。这个问题有..._前端获取视频第一帧

推荐文章

热门文章

相关标签