C语言 结构体与结构体指针用法总结
2017-08-20 17:03
330 查看
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。
我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:
structbook
{
char name[30];
char author[20];
};
structbook
a[2] = { { "Nature","Lina"
},{ "Animals","Nick"
} };
以上代码定义了一个名为book的结构体,然后a作为带有这个结构体的变量的一个内含两本书的列表(结构体数组)。也可以定义为如下:
structbook
{
char name[30];
char author[20];
}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };
所完成的功能是完全一样的。第二种方法用得更多因为写法更简练。
然后,如果你想看到定义的信息,最直接的方法是把结构体写到main函数里print出来,完整代码如下:
#include<stdio.h>
int
main() {
structbook
{
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函数里外均可):
#include<stdio.h>
structbook
{
char
name[30];
char
author[20];
}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };
int
main() {
structbook*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>
structbook
{
char
name[30];
char
author[20];
};
int
main() {
structbook*p;
structbook
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>
typedefstructbook
{
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);
}
运行效果是一样的。
我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:
structbook
{
char name[30];
char author[20];
};
structbook
a[2] = { { "Nature","Lina"
},{ "Animals","Nick"
} };
以上代码定义了一个名为book的结构体,然后a作为带有这个结构体的变量的一个内含两本书的列表(结构体数组)。也可以定义为如下:
structbook
{
char name[30];
char author[20];
}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };
所完成的功能是完全一样的。第二种方法用得更多因为写法更简练。
然后,如果你想看到定义的信息,最直接的方法是把结构体写到main函数里print出来,完整代码如下:
#include<stdio.h>
int
main() {
structbook
{
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函数里外均可):
#include<stdio.h>
structbook
{
char
name[30];
char
author[20];
}a[2] = { {"Nature","Lina"
},{ "Animals","Nick"
} };
int
main() {
structbook*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>
structbook
{
char
name[30];
char
author[20];
};
int
main() {
structbook*p;
structbook
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>
typedefstructbook
{
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);
}
运行效果是一样的。
相关文章推荐
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
- C语言高频面试题之sizeof与指针和结构体专题总结
- C语言的指针、数据、结构体关系总结
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言高频面试题之sizeof与指针和结构体专题总结
- 一道简单题--解释C语言的指针,结构体等基本用法
- C语言结构体指针,函数指针的用法
- c语言结构体中保存函数指针的用法
- C语言的指针、数据、结构体关系总结
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- C语言结构体里的成员数组和指针
- C语言中数组名和指针的区别 及 sizeof用法
- C语言宏高级用法 [总结]
- C语言指针总结
- 黑 马 程 序 员_视频学习总结<C语言>----03 指针
- const限定修饰符用法总结(常量,指针,迭代器,函数参数,成员函数)
- 初级菜鸟 学习学习递归调用以及结构体中包含指向自己的指针用法
- C语言结构体变量和结构体变量的指针作函数参数例题