指针的运算

目录

开头

大家好,我叫这是我58。今天,我们来介绍一下指针的运算和与之相关的一些东西。

1.什么是指针的运算?

总结

指针的运算,有这三种,分别是"指针 ± \pm ±整数""指针 − - −指针"和指针的关系运算。

指针 ± \pm ±整数

在"指针 ± \pm ±整数"的运算中,返回值见下面的表格。

运算符 整数类型 返回值
+ + + 正整数 指针从中间往右数第整数位的地址
+ + + 负整数 指针从中间往左数第 ∣ | ∣整数 ∣ | ∣位的地址
− - − 正整数 指针从中间往左数第整数位的地址
− - − 负整数 指针从中间往右数第 ∣ | ∣整数 ∣ | ∣位的地址

其中,如果指针 ± 0 \pm0 ±0,就只返回指针的地址,这与数学中的公式 a ± 0 = a a\pm0=a a±0=a(这里的a代指针)是一模一样的,而这时候,就有问题出现了。

这是我58,为什么在0x0000000000000000的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF呢?

其实啊,如果看着这上面的图片,就知道为什么在0x0000000000000000的字符型指针的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF了,因为在这张图片中的"内存"中,如果假设字符型指针的地址为0x0000000000000000,那么而这个指针从中间往左数的第一位地址为0xFFFFFFFFFFFFFFFF,所以,这就是在0x0000000000000000的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF的原因。

指针 − - −指针

在"指针 − - −指针"的运算中,返回这两个指针之间的元素个数,并且,如果这两个指针没有指向同一块空间(比如数组),就会使这个运算出现错误。掌握起来特别简单。

指针的关系运算

p >= arr或者p >= pa(ppaarr是一个指针)中,就是指针的关系运算,主要的作用就是用来判断指针与指针的关系。这个不必多讲。

2.指针的运算的实际运用

模拟strlen函数

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Strlen(char* str) {
	char* p = str;
	while ('\0' != *p) {
		p++;
	}
	return p - str;
}
int main() {
	char str[] = "Hello,world!!!";
	printf("%d", Strlen(str));
	return 0;
}

数组全部初始化为0

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void init(int* arr,int sz) {
	int* p = arr + sz - 1;
	int* pa = arr;
	for (; pa <= p;) {
		*pa++ = 0;
	}
}
int main() {
	int arr[9] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof arr / sizeof arr[0];
	int i = 0;
	init(arr,sz);
	for (i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}

逆序输出数组

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void reprint(int* arr,int sz) {
	int* p = arr + sz - 1;
	for (; p >= arr; p--) {
		printf("%d ", *p);
	}
}
int main() {
	int arr[9] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof arr / sizeof arr[0];
	int i = 0;
	reprint(arr, sz);
	return 0;
}

......

结尾

在你看到这之后,可以评论来互动一下我吗?

相关推荐
leaves falling5 分钟前
c语言自定义类型深度解析:联合(Union)与枚举(Enum)
c语言·开发语言·算法
leiming616 分钟前
手写Linux C UDP通信
linux·c语言·udp
深兰科技19 分钟前
俄罗斯T1集团代表团到访深兰科技,就具身智能与复杂场景工程化应用达成多项合作共识
windows·ci/cd·github·visual studio·具身智能·深兰科技·俄罗斯t1集团
水饺编程37 分钟前
第4章,[标签 Win32] :绘制信息结构
c语言·c++·windows·visual studio
凯子坚持 c1 小时前
在 Visual Studio 2019 中配置 Qt 插件开发环境:编译原理 + 底层逻辑解析
ide·qt·visual studio
是做服装的同学1 小时前
服装管理系统ERP是什么?它的主要功能与优势有哪些?
大数据·经验分享·其他
易观Analysys1 小时前
中国GEO行业市场发展报告2026
其他
ElfBoard2 小时前
ElfBoard技术贴|如何在ELF-RK3506开发板上构建AI编程环境
c语言·开发语言·单片机·嵌入式硬件·智能路由器·ai编程·嵌入式开发
枫叶丹42 小时前
【Qt开发】Qt系统(八)-> Qt UDP Socket
c语言·开发语言·c++·qt·udp
程序猿编码2 小时前
无状态TCP技术:DNS代理的轻量级实现逻辑与核心原理(C/C++代码实现)
c语言·网络·c++·tcp/ip·dns