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

运行结果:

相关推荐
2601_966949655 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin5 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
滕州市燕猫虎计算机科技工作室个体工商户5 小时前
Java锁
java·开发语言
派葛穆6 小时前
Lerobot -飞特舵机ST-3215双舵机联动(ESP_NOW)
c语言
多加点辣也没关系6 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2336 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21036 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客6 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
新时代牛马8 小时前
cyclictest 毛刺从哪来?从ftrace、latencytop、perf到IRQ/调度延迟定位
android·开发语言·python·kotlin
三8448 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker