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

运行结果:

相关推荐
阿拉斯攀登4 分钟前
20 个 Android JNI + CMake 生产级示例
android·java·开发语言·人工智能·机器学习·无人售货柜
!停7 分钟前
C++入门STL容器string使用基础
开发语言·c++
m0_716765238 分钟前
数据结构--栈的插入、删除、查找详解
开发语言·数据结构·c++·经验分享·学习·青少年编程·visual studio
qq_12084093719 分钟前
Three.js 模型加载与线上稳定性实战:路径、跨域、缓存与降级全链路指南
开发语言·javascript·缓存·vue3
米啦啦.10 分钟前
多态性、虚函数
开发语言·c++·算法·多态·抽象类·纯虚函数
kernelcraft12 分钟前
Matlab读取CSV数据并处理:从入门到实战的完整指南
开发语言·其他·matlab
XMYX-013 分钟前
14 - Go 结构体(struct):从基础到高级实战
开发语言·golang
ShineWinsu18 分钟前
百度搜索算法逆向思考的技术文章
开发语言
lhbian19 分钟前
C# vs 汇编:编程世界的两极对比
开发语言·汇编·c#
handler0122 分钟前
Linux基础知识(1)
linux·服务器·c语言·开发语言·数据结构·c++