c/c++结构体与结构体指针

来源:互联网 发布:union all 不同数据库 编辑:程序博客网 时间:2024/06/14 02:39

一、定义结构体变量

举个具体的例子,如将在校学生的信息定义为一个结构体,信息内容包括学生的姓名(string)、学号(long)、年龄(int)等,就可以声明如下:

struct {      char sName[10];      long sNo;      int sAge;  };  

结构体本质是一种数据类型,和C语言的内置内型(char,int,long …)类似,我们可以用它来定义变量,如定义一个学生Jack就可以这样:

struct {      char sName[10];      long sNo;      int sAge;  }Jack;  

如还要再定义一个学生Rose:

struct {      char sName[10];      long sNo;      int sAge;  }Rose;  

我们就发现每次定义一个这样的结构体变量非常麻烦,每次都要将结构体类型声明完整写一遍,于是就引进了在struct关键字后面加上“结构标签”,例如上面的结构体就可声明为:

struct stuInfo{      char sName[10];      long sNo;      int sAge;  };  

从此定义变量可以这样完成:

struct stuInfo Jack;struct stuInfo Rose;

如果你还嫌略为麻烦,C语言中还可以通过关键字typedef对类型重命名,这样我们可以将上面的结构体重新命一个名字,如叫sInfo:

typedef struct stuInfo sInfo;

定义变量将变得异常简单:

sInfo Jack;  sInfo Rose;  

将上面几步融合一起,就是我们通常所使用的定义结构体变量的方法:

先声明一个结构体:

typedef struct stuInfo{      char sName[10];      long sNo;      int sAge;  }sInfo;  

再定义变量:

sInfo stu1, stu2;  

二、结构体指针

1.结构体指针对结构体中元素的访问需要用“->”访问,而结构体变量用“.”访问相应的结构体元素。
2.作为函数的形参时,结构体指针作为形参时,函数体内对结构体内容的改变将返回,而变量作为参数时则不能传递返回。

测试:

#include<stdio.h>typedef struct stru{    int a;    int b;}A;A var,*ptr; //定义结构体和结构体指针void fun1(A vvar);void fun2(A *pptr);int main(){    A ss={1,2}; //赋初值    var = ss;    ptr = &ss;    fun1(var);    printf("after fun1:\n");    printf("var.a is %d\n",var.a);   //a和b的值未改变    printf("var.b is %d\n\n",var.b);    printf(".....................................\n\n");    fun2(&var);    printf("after fun2:\n");    printf("var.a is %d\n",var.a);  //a和b的值均改变    printf("var.b is %d\n\n",var.b);    return 0;}void fun1(A vvar){printf("var.a is %d\n",vvar.a);printf("var.b is %d\n",vvar.b);vvar.a = 100;vvar.b = 200;}void fun2(A *pptr){printf("ptr->a is %d\n",pptr->a);printf("ptr->b is %d\n",pptr->b);pptr->a = 300;pptr->b = 400;}

结果:
这里写图片描述
参考:http://blog.csdn.net/hazir/article/details/7449779?locationNum=12&fps=1

原创粉丝点击