目录
[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;
}
运行结果: