这里的话因为接下来讲线性表之类需要用到C语言的结构体指针
因此,这一讲将对结构体指针进行一个讲解
1,指针
指针是C语言中的一个重要的概念,也是C语言的一个重要特色。
正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组……
掌握指针的应用,可以使程序简洁、紧凑、高效。很多人说指针很难
确实,但是指针难的不是其定义,而是其用法,针对指针的用法我就不过阐述,这里对指针做个讲解
1.1地址和指针的概念
为了说清楚什么是指针,必须弄清楚数据在内存中是如何存储的,又是如何读取的,这里要分清楚指针与地址的区别
地址
内存区的每一个字节有一个编号,这就是“地址” 。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。
指针
在C语言中,指针是一种特殊的变量,它是存放地址的。
举个例子,我们定义一个变量
int a=5;
因为这是一个数据,因此计算机需要为它在内存开辟一个“房间a”来放a的值5,并且这个房间的大小为4个字节
因此,“房间号”便是地址,指针就是“房间B”,“房间B”中放着“房间a”的地址
重点:操作符“*”和“&”
这里要认识两个操作符
*:取值操作符
&:取址操作符
顾名思义,*就是对指针进行取值操作(同时还有一个功能:对指针变量进行声明), &对数据类型进行取址操作
下面举个例子:
int i = 2000;
int *pointer;//声明一个指针变量pointer
pointer = &i;//取出地址
printf("%d\n", *pointer);
printf("%d\n", &pointer);
运行结果如下:
如&a表示变量a的地址,&b表示变量b的地址。当然,变量本身必须预先声明。
2,结构体
在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。
我们来看一个简单的例子。
比如你想定义一个商品列表然后每件商品为创建商品名,价格作为商品的信息。结构体变量定义如下:
struct shop {
char goods_name[30];
char goods_value[20];
};
struct shop a[2] = { { "Coca Cola","3 yuan" },{ "bubble gum","2yuan" } };
假如你要把结构体内的数据print出来,则
#include<stdio.h>
int main() {
struct shop {
char goods_name[30];
char goods_value[20];
};
struct shop a[2] = { { "Coca Cola","3 yuan" },{ "bubble gum","2 yuan" } };
int i;
for (i = 0; i < 2; i++) {
printf("book name: %s author: %s\n", a[i].goods_name, a[i].goods_value);
};
getchar();
return(0);
}
输出结果如下:
3,结构体指针
定义一个指向结构体(shop)变量的指针函数p:struct shop *p
想要达到向上面一样的运行结果,实现代码如下(结构体定义在main函数里外均可):
#include<stdio.h>
struct book {
char goods_name[30];
char goods_value[20];
}
struct shop a[2] = { { "Coca Cola","3 yuan" },{ "bubble gum","2 yuan" } };
int main() {
struct shop *p;
for (p = a; p < a+2; p++) {
printf("goods name: %s value: %s\n", p->goods_name, p->goods_value);
};
getchar();
return(0);