【C语言】_指针运算

目录

[1. 指针+-整数](#1. 指针+-整数)

[2. 指针-指针](#2. 指针-指针)

[2.1 指针-指针含义](#2.1 指针-指针含义)

[2.2 指针-指针运算应用:实现my_strlen函数](#2.2 指针-指针运算应用:实现my_strlen函数)

[3. 指针的关系运算(大小比较)](#3. 指针的关系运算(大小比较))


1. 指针+-整数

联系关于指针变量类型关于指针类型和指针+-整数相关知识:

原文链接如下:

【C语言】_指针变量-CSDN博客https://blog.csdn.net/m0_63299495/article/details/144883068对于type* p,p+n表示跳过n×sizeof(type)个字节;

以打印一维数组元素(数组在内存中连续存放)为例:

代码示例1:利用下标打印:

cpp 复制代码
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}

运行结果为:

代码示例2: 利用指针打印:

cpp 复制代码
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int* p = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++) {
		printf("%d ",*p);
		p++;
	}
	return 0;
}

运行结果如下:

代码示例3:利用指针打印:

cpp 复制代码
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++) {
		printf("%d ", *(p + i));
	}
	return 0;
}

运行结果如下:

2. 指针-指针

2.1 指针-指针含义

指针-指针的绝对值得到的是指针与指针之间元素的个数:

代码示例:

cpp 复制代码
int main() {
	int arr[10] = { 0 };
	printf("%d\n", &arr[9] - &arr[0]);
	printf("%d\n", &arr[0] - &arr[9]);
	return 0;
}

运行结果为:

注:指针-指针运算的前提是两个指针必须指向同一块内存空间:

cpp 复制代码
int main() {
	int arr[6];
	char ch[5];
	printf("%d",&arr[4]-&ch[3]);  //error
}

arr[6]与ch[5]的内存空间未必连续,这样的指针相减运算是没有意义的;

2.2 指针-指针运算应用:实现my_strlen函数

1、strlen函数的功能:计算字符串长度(\0前的字符个数)

cpp 复制代码
int main() {
	char arr[] = "abcdef";
	int len = strlen(arr);
	printf("The length of the array is %d\n" ,len);
	return 0;
}

运行结果如下:

2、实现my_strlen()函数:

实现方式1:

cpp 复制代码
#include<stdio.h>
int my_strlen(char* str) {  
	// 关于形参:arr == &arr[0],用字符指针接收
	int count = 0;
	while (*str != '\0') {
		count++;
		str++;
	}
	return count;
}
int main() {
	char arr[] = "abcdef";
	// 字符串变量末尾暗含一个\0:[a b c d e f \0]
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

运行结果:

实现方式2:

cpp 复制代码
int my_strlen(char* str) {
	char* start = str;
	while (*str != '\0') {
		str++;
	}
	return str - start;
}
int main() {
	char arr[] = "abcdef";
	// 字符串变量末尾暗含一个\0:[a b c d e f \0]
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

运行结果:

3. 指针的关系运算(大小比较)

代码示例:利用指针关系实现数组元素遍历:

cpp 复制代码
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	while (p < arr + sz) {
		printf("%d ", *p);
		p++;
	}
	return 0;
}

运行结果:

相关推荐
侃侃_天下3 天前
最终的信号类
开发语言·c++·算法
echoarts3 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix3 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题3 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说3 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔3 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔3 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing102329293 天前
Day03_刷题niuke20250915
c语言
我是菜鸟0713号3 天前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_3 天前
QT(4)
开发语言·汇编·c++·qt·算法