C语言指针

C语言指针

第一次写博客,如果写的不好请大佬们帮我更正

最近学校实训,我选的嵌入式,老师今天浅提了指针,我复习了一遍,看了b站江科大的视频。
https://www.bilibili.com/video/BV1Mb4y1X7dz/?spm_id_from=333.337.search-card.all.click&vd_source=a455dbf91615f50295fdf2098b9f2f00

指针简介

  1. 指针是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂;
  2. 指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问。

存储机制

在这里插入图片描述
如果是一个基本数据类型(int, float, double, char, bool, 枚举)数据存储分为:

小端存储:如下图

在这里插入图片描述

大端存储 :与小端存储相反

如果是数值,结构体这种:数值/结构体中的每个变量按顺序存储,每个变量按照基本数据类型存储。

定义指针

	指针即指针变量,用于存放其他数据单元(变量/数组/结构体/函数等)的首地址。若指针存放了某个数据单元的首地址,则这个指针指向了这个数据单元,若指针存放的值是0,则这个指针为空指针

在这里插入图片描述
k位系统:x = k / 8 ====》 字节 = 系统位数 除以 8bit

指针的操作

在这里插入图片描述
这里的++,-- 操作,每次都是加上/减去对应的数据类型所占的宽度

int num = 10;
int *p = #
// 输出值 *取值运算符
cout << num << endl;
cout << *p << endl;
// 输出地址 &取址运算符
cout << &num << endl;
cout << p << endl;

cout << p + 1 << endl;

显示结果:
在这里插入图片描述
地址分析:
在这里插入图片描述

数组与指针

二者本质上是一样的

在这里插入图片描述

注意事项

在这里插入图片描述

指针的应用

在这里插入图片描述
第一种情况(节省空间):

void getMax(int *a, int length)
{
int max = a[0];
for(int i = 1; i < length; i++)
    if(max < a[i])
        max = a[i];
cout << max << endl;
}
// main函数里的部分代码
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int length = 10;
getMax(arr, length);

地址分析:节省了32B
在这里插入图片描述

第二种情况(多个返回值):

void getMax(int *a, int length, int *max, int *min)
{
	*max = a[0], *min = a[9];
	for(int i = 0; i < length; i++)
	{
    	if(*max < a[i])
        	*max = a[i];
    	if(*min > a[i])
       		*min = a[i];
	}
}
// main函数部分代码
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int length = 10;
int max;
int min;
getMax(arr, length, &max, &min);
cout << max << " " << min << endl;

地址分析(只看max,min):
在这里插入图片描述
第三种(模块句柄):
这主要由c和c++本身的库组成
eg: strcpy(*const char c1, *const char c2)————》里面的参数是两个常量字符串指针,将c2复制到c1上,c2值和地址不变,c1的值改变,地址不变(这部分理解不是很清楚,有机会再补)

第4种:单片机还在路上,回头学完51再补……

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值