【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
}

arr6与ch5的内存空间未必连续,这样的指针相减运算是没有意义的;

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;
}

运行结果:

相关推荐
FRing0310 分钟前
JavaScript入门到精通二十八(forEach遍历、创建对象的三种方式、构造函数、new实例化执行过程、实例成员和静态成员)
开发语言·前端·javascript
1024奇点27 分钟前
【仓颉语言入门 · 第二篇 第 15 课】
开发语言·数据库·ide·开源
独隅39 分钟前
Claude 高效使用指南深度评测
java·开发语言·claude·claude code
Agent世界40 分钟前
千问Go上线我的应用:一句话生成可部署 AI 软件的技术拆解
开发语言·人工智能·golang·ai智能体
布莱克60542 分钟前
C++ 中 unordered_set 与 unordered_map 有什么不同?一篇讲透
开发语言·c++·哈希
外收内放1 小时前
FastAPI猜字谜实战(6):日志与异常
开发语言·python·学习·fastapi
垆边人似月.1 小时前
预处理与参数调优(让识别率从“能看”到“可用”)
开发语言·python·自然语言处理
泡泡糖的中文规格书1 小时前
HDLbits 2.2 学习笔记 · 多路复用器
java·开发语言
John_Hui1 小时前
第 3 篇:配置 JDK 17 环境
java·开发语言·ubuntu
知识分享小能手1 小时前
C学习教程,从入门到精通,C语言单片机基础 — 完整知识点手册(19)
c语言·单片机·学习