C语言指针和结构体指针相关学习的笔记(实验例程)

这是我学习C语言指针部分的笔记,指针对于C语言来说是无比的重要的,它能够在数据处理方面提高单片机的执行效率和数据调用相关的便利性,但是指针这一块确实是一个难啃的骨头,本次通过学习指针也是花了很大的功夫。其实指针说难也不难,但就是很难转过那个弯。
下面是我根据学习过程编写的两篇关于指针和结构体指针的引用实例,算作笔记吧,同时也方便自己以后查看,分享出来大家学习学习,有错误的话希望相互指正,感谢!话不多说直接上代码,代码里有详细的说明。
1、 该部分是指针的运用:

#include<stdio.h>
//本例程主要用于学习C语言指针、指针数组、数组指针的应用方法,仅供学习,如有错误欢迎指正!
int main()
{
	int arr[5] = {1,3,5,7,9};
	int brr[3] = {10,20,30 };
	int crr[2][3] = {17,18,19,20,21,22};
	int temp = 4;
	int temp1 = 13;
	int* ptr;
	//指针数组,实质是一个数组,使用方法与数组类似
	int* ptrr[2] = {arr,brr};//这里的arr等价于&arr[0],brr等价于&brr[0]
	//数组指针,实质是一个指针,存放的是指向数组地址的指针
	int(*pttr)[5] = &arr;
	int(*ctrr)[3] = &crr[0];//这里的&crr[0]等价于crr,数组指针必须明确指向数组每行元素个数
	
	temp = ptrr[0][3] + temp;//ptrr[0][3]表示ptrr中第一个元素偏移3的值
	temp1 = (*pttr)[2] + temp1;//(*pttr)[2]表示pttr所指向的数组首地址偏移2的地址中的值
	ptr = &temp1;

	//这里的ptrr[1][0]等价于*ptrr[1]的首地址存放的值,
	printf("%d %d %d \n", *ptr, ptrr[0][4], ptrr[1][0]);//输出18  9  10
	printf("%d %d\n", (*ctrr)[1],(*(ctrr+1))[2]);//输出18 22
	printf("%d %d\n", *ctrr[1], (*(ctrr + 1))[2]);//输出数组第二行第一个值20 输出数组第二行第三个值22
}

2、 该部分是关于结构体及结构体指针的运用:

#include <stdio.h>

typedef struct book
{
	int author[5];
	int* ptitle;//定义一个指针
	int(*btr)[5];//定义一个数组指针,指针指向的数组包含5个元素,不同于* btr[5]指针数组
	int (*call)(int);//定义一个函数指针
};

book book1;//定义结构体变量
int arr[5] = {1,2,3,4,5};
int callStruct(int n)
{
	printf("%d\n", n);
	return n;
}

void  main(void)
{
//	for (int i = 0;i < 5;i++)
//		book1.author[i] = i;//结构体数组赋值
	book1.author[0] = arr[3];//结构体数组赋值
	book1.author[1] = arr[1];//结构体数组赋值
	book1.author[2] = arr[0];//结构体数组赋值
	book1.author[3] = arr[2];//结构体数组赋值
	book1.author[4] = arr[4];//结构体数组赋值
	book1.call = callStruct;//函数指针定义
	book1.ptitle = &book1.author[2];//指针指向数组某一个元素的地址,相当于&book1.author[n]
	book1.btr = &book1.author;//指针指向数组第一个元素的地址
	book1.call(15);//函数指针的引用
	//取指针指向的地址偏移若干位置后所存放的值,输出 1 3 5 和两个越界随机值
	printf("%d %d %d %d %d\n", *(book1.ptitle), book1.ptitle[1], *(book1.ptitle + 2), book1.ptitle[3], book1.ptitle[4]);
	//(*book1.btr)即为book1.author,[n]中n表示数组的位置,输出4 2 1 3 5
	printf("%d %d %d %d %d\n", (*book1.btr)[0], (*book1.btr)[1], (*book1.btr)[2], (*book1.btr)[3], (*book1.btr)[4]);
}

3、附带上个人觉得讲的还不错的两位老师的视频链接,喜欢的朋友可以去看看:
链接: link.主讲:蒙蒙Plus
链接: link作者:李立志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值