大白话讲数据结构和算法__04 C语言 结构体 与结构体指针

这里的话因为接下来讲线性表之类需要用到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);
 

猜你喜欢

转载自blog.csdn.net/qq_41686130/article/details/81240696