下面是对“C语言指针算术运算”的详细讲解:
一、C语言指针算术运算简介
C语言中,指针算术运算指的是对指向某个数据类型对象的指针进行加减运算的过程。运算的结果是指针类型的值,指向新的地址,这个新的地址是运算前指针地址和运算对象的数据类型大小的乘积(单位是字节)所形成的。
C语言中的指针算术运算具有如下两条规则:
- 指针类型和加减对象的类型必须是一致的。
- 对指针进行加减运算时,指针指向的内存地址会根据指针类型的大小,增加或减少相应字节数,而不是增加或减少数据值的大小。
以下是指针算术运算的两条常用规则,接下来我们通过示例进一步理解。
二、指针算术运算示例
1. 示例1:数组名作为指针
当我们把数组名作为指针使用时,指针变量指向的内存空间地址的值是数组的第一个元素的地址,可以通过指针访问数组中的后续元素。以下代码展示了如何使用指针算术运算来访问数组中的元素:
#include <stdio.h>
int main () {
int arr[5] = {0, 1, 2, 3, 4};
int *p = arr; // 等价于 int *p = &arr[0];
printf("初始:arr[0]=%d, arr[1]=%d, arr[2]=%d, arr[3]=%d, arr[4]=%d\n", arr[0], arr[1], arr[2], arr[3], arr[4]);
p++; // 指向 arr[1]
printf("p++ 后:arr[0]=%d, arr[1]=%d, arr[2]=%d, arr[3]=%d, arr[4]=%d\n", *p, *(p+1), *(p+2), *(p+3), *(p+4));
p--; // 指向 arr[0]
printf("p-- 后:arr[0]=%d, arr[1]=%d, arr[2]=%d, arr[3]=%d, arr[4]=%d\n", *p, *(p+1), *(p+2), *(p+3), *(p+4));
p = p + 2; // 指向 arr[2]
printf("p+2 后:arr[0]=%d, arr[1]=%d, arr[2]=%d, arr[3]=%d, arr[4]=%d\n", *p, *(p+1), *(p+2), *(p+3), *(p+4));
return 0;
}
代码注释:
- 第4行定义了数组 arr,初始化了其值;
- 第5行定义指针变量 p,并让它指向数组 arr 的第一个元素;
- 第7-9行使用 printf 打印了初始的数组 arr 的所有元素的值;
- 第11行将指针变量 p 加1,让它指向数组 arr 的第二个元素;
- 第13-15行使用 printf 打印了 p++ 后数组 arr 的所有元素的值;
- 第17行将指针变量 p 减1,让它再次指向数组 arr 的第一个元素;
- 第19-21行使用 printf 打印了 p-- 后数组 arr 的所有元素的值;
- 第23行将指针变量 p 加2,让它指向数组 arr 的第三个元素;
- 第25-27行使用 printf 打印了 p+2 后数组 arr 的所有元素的值。
2. 示例2:字符串指针
字符串常量是C语言中最常见的变量类型之一。当我们使用指针操作字符串时,指针变量指向的内存空间地址的值是字符串首字符的内存地址,可以通过指针访问字符串中的后续字符。
以下代码展示了如何使用指针算术运算来访问字符串中的元素:
#include <stdio.h>
int main () {
char str[] = "Hello, World!";
char *p = str;
printf("字符串为:%s\n", str);
printf("初始:第一个字符为 %c\n", *p);
p++;
printf("p++ 后,第二个字符为 %c\n", *p);
p = p + 4;
printf("p+4 后,第五个字符为 %c\n", *p);
return 0;
}
代码注释:
- 第4行定义字符串变量 str,初始化了其值;
- 第5行定义指针变量 p,并让它指向字符串 str 的首字符;
- 第7行使用 printf 打印了字符串 str 的值;
- 第8行使用 printf 打印了字符串的首字符;
- 第10行将指针变量 p 加1,让它指向字符串 str 的第二个字符;
- 第12行使用 printf 打印了 p++ 后字符串 str 的第二个字符;
- 第14行将指针变量 p 加4,让它指向字符串 str 的第五个字符;
- 第16行使用 printf 打印了 p+4 后字符串 str 的第五个字符。
结语
至此,我们介绍了C语言中指针算术运算的规则和应用。指针算术运算是C语言中非常重要的概念,对于理解指针操作和数组操作具有重要意义。希望本文能对大家进一步了解C语言指针算术运算有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言指针算术运算 - Python技术站