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

一、定义结构体变量

举个具体的例子,如将在校学生的信息定义为一个结构体,信息内容包括学生的姓名(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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值