今天,学习到了一个极为重要的知识——指针
在c语言中,与指针相关的操作符有“&”(取地址),“*”(解引用),
对于取地址符号,已较为熟悉。
而“*”解引用符号,则还是一个较为新奇且难懂的概念。
意思大概就是——返回‘某一指针变量所指向'的地址所保存的值
例如:
//int main()
//{
// int a = 10;
// int* p = &a;//int*表示指针p指向的对象“a”的类型,&a表示求内存中a所对于的4个byte的地址(32位)
// return 0;
//学习如何表示复杂的对象————使用结构体
//结构体关键字——struct
//struct+描述对象的类型
//例如表示一本书
struct book//这本书包括两个参数 一个是书名,采用字符的形式表示,一个是价格,采用短整型的形式表示
{
char name[20];//假设书名取为“高等数学1”
short price;//假设价格设置为 “28”
};
//接下来,使用主函数,将相应参数写入这本书
//int main()
//{
// struct book b1 = { "高等数学1",28 };//利用结构体类型,创建一个该类型的结构体变量 “b1”,输入相关信息
// //为了验证我们是否写入成功,将结果进行打印。
// printf("这本书的书名是%s\n", b1.name);//如何在b1这个变量中找到name?我们输入b1.,可以将鼠标放入b1上,
// //会看到我们先前设置的两个参数,1是name,2是price,我们输入b1.name即可表示书名这个变量了
// printf("价格为%d\n", b1.price);//与上同理
//
// //假如我们相要修改这本书的价格,我们能否在结构体外部进行修改呢?
// b1.price = 15;
// printf("修改后的价格为%d", b1.price);//这样做是否可行呢?查看结果
// return 0;
//}
//结果输出为:
//这本书的书名是高等数学1
//价格为28
//修改后的价格为15
//由此可知,在结构体外部,也能修改结构体内部的变量值。
// 但是仅能修改变量值
//如:b1.name="xxxx";则会报错,原因是name是数组类型,不是变量类型
//需要用到库函数<string.h>-strcpy-string copy-字符串拷贝
//strcpy(b1.name,预期修改的书名);
//除此之外,还有一种方式能进行这本书相关信息的打印,那就是使用指针。
//int main()
//{
// struct book b1={"高等数学1",28 };
// struct book* pb = &b1;//指针pb所指向的类型为结构体——struct book,故指针pb的声明为struct book*
// printf("这本书的名字为%s\n",(*pb).name);//*pb为指针指向地址中所保存的值,也就是b1的内容
// printf("这本书的价格为%d\n", (*pb).price);//同理
// return 0;
//}
//输出结果为:
//这本书的名字为高等数学1
//这本书的价格为28
//指针还有第二种使用形式:
int main()
{
struct book b1 = { "高等数学1",28 };
struct book* pb = &b1;
printf("这本书的名字为%s\n", pb->name);//“pb->”意为“指针pb”所指向的内容,而pb指向b1,
//此时就相当于b1.name
printf("这本书的价格为%d\n", pb->price);//同理
return 0;
}
//总结一下“.”与“->”的用法
//.——结构体变量.成员
//->——结构体指针->成员