C语言 结构体与结构体指针用法总结

在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。

我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:

struct book {

  char name[30];

  char author[20];

};

struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };

以上代码定义了一个名为book的结构体,然后a作为带有这个结构体的变量的一个内含两本书的列表(结构体数组)。也可以定义为如下:

struct book {

  char name[30];

  char author[20];

}a[2] = { {"Nature","Lina" },{ "Animals","Nick" } };

所完成的功能是完全一样的。第二种方法用得更多因为写法更简练。

遍历结构体中成员内容并打印出来,完整代码如下:

#include<stdio.h>

int main() {

struct book {

char name[30];

char author[20];

}a[2] = { {"Nature","Lina" },{ "Animals","Nick" } };

int i;

for (i = 0; i < 2; i++) {

printf("book name: %s author: %s\n", a[i].name, a[i].author);

};

getchar();

return(0);

}

 

运行后的输出值为:

 

book name: Nature    author: Lina
book name: Animals    author: Nick

 

定义一个指向结构体(book)变量的指针函数p:struct book *p

现在就可以用结构体指针完成上述同样的功能了(结构体定义在main函数外为全局变量,main函数内为局部变量,两种均可):

#include<stdio.h>

struct book {

char name[30];

char author[20];

}a[2] = { {"Nature","Lina" },{ "Animals","Nick" } };



int main() {

struct book*p;

for (p = a; p < a+2; p++) {

printf("book name: %s author: %s\n", p->name, p->author);

};

getchar();

return(0);

}

 

输出值和之前的程序一样。

 

 

以下例子为使用&地址符号给结构体指针赋值:

#include<stdio.h>

struct book {

char name[30];

char author[20];

};



int main() {

struct book*p;

struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };

p = &a[0];

printf("book name: %s author: %s\n", p->name, p->author);

getchar();

return(0);

}

 

输出结果为存入的a[0]的信息:

 

book name: Nature    author: Lina

 

另外在许多大型软件的开发中,经常会定义结构体变量为宏变量以简化结构体的引用。例如:typedef struct book{...}BOOK, 引用的时候就直接定义BOOK a。简而言之,就是把struct book替换为BOOK。

#include<stdio.h>

typedef struct book {

char name[30];

char author[20];

}BOOK;



int main() {

BOOK*p;

BOOK a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };

p = &a[0];

printf("book name: %s author: %s\n", p->name, p->author);

getchar();

return(0);

}


运行效果是一样的。

 

 



  • 93
    点赞
  • 317
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值