前言
- 我个人觉得其实当代的计算机书籍都已经落伍很多年了,如果再按照严蔚敏版的《数据结构》学习这些结构体这些东西,我觉得是得不偿失的。所以在大家看这篇博客的时候,我建议大家思考一下是否真的需要使用指针?是否真的需要使用结构体?
1.申请一个指针之后,必须将这个指针指向某个具体的地址,这样这个指针才具有作用,比如以下代码。
#include <stdio.h>
typedef struct {
char bookISBN[20];//书号
char bookName[20];//书名
int price;//数据项
}Book;//这里的Book为单纯的节点
int main(){
Book book;//新建一个Book型结构体
scanf("%s %s %d",&book.bookISBN,&book.bookName,&book.price);
//printf("%s %d\n",book.bookName,book.price);
Book *b;//声明一个Book型的指针
b =&book;//为这个指针b指向节点book
//b = book; 错误使用指针 => [Error] cannot convert 'Book' to 'Book*' in assignment
printf("%s %s %d\n",b->bookISBN,b->bookName,b->price);
}
/**测试数据
0001 计算机网络 23
0002 数据结构 34
**/
分析
- 定义一个结构体Book,里面的属性有两个
char[]数组,一个int型变量。 - 在main函数中,定义一个Book型变量book,这个book是一个具体的结构体节点,输入值到其中。
- 我们新建一个
Book*型的指针,指向刚才申请的book节点,这要就可以访问到book的具体内容了。 - 需要注意的是:
b = &book; 这一步是将 book 的地址赋给指针b,从而b能够访问book 中的值。如果没有这么做,那么出现的错误就是:不能讲Book型变量转换成Book*(指针)型。 - 对于指针型变量,我们需要使用
b->price,而非 b.price 。
2. 例2
2.1 代码
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int a[5] = {1,2,3,4,5};
cout <<"&a = "<< &a <<"\n";
cout <<"&a + 1 = "<< &a + 1<< "\n"; //加的是一个数组的整个字节内容 【】
cout <<"a = "<< a<<"\n";
cout <<"*a = "<< *a<<"\n";
cout <<"*(a + 1) = "<< *(a + 1)<<"\n";
}
2.2 分析
&a + 1; //加的是一个数组的整个字节内容 【即int 是4个字节,5个int,就是20字节,用16进制的表示就是14。】
2.3 执行结果

















