目录
1:指针的运算
1.1:指针+-整数(前面说过)
1.2:指针减指针
前提是两个指针指向的是同一个空间
指针减指针得到的数字绝对值代表着两个指针之间元素的个数
#include<stdio.h>
int my_strlen(char* p) {
char* p1 = p;
while (*p != '\0') {
p++;
}
return p - p1;//指针相减,实现strlen函数
}
int main() {
char arr[] = "秋天的第一杯奶茶";
printf("秋天的第一杯奶茶是%d个字符\n",my_strlen(arr));
return 0;
}
1.3:指针的关系运算
规定:允许指向数组元素的指针可以与指向数组最后一个元素后面那个内存位置的指针比较,但是不允许与指向数组第一个元素前面那个内存位置的指针比较
2:指针可以直接访问数组元素
通过指针对数组元素赋值
通过指针访问数组元素,并打印出来
#include<stdio.h>
int main() {
int arr[10] = { 0 };
int* p = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++) {
*(p + i) = i;
}
for (int i = 0; i < sz; i++) {
printf("%d ", *(p + i));
}
return 0;
}
3:二级指针
指向指针的指针
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
int* p = &a;
int** pp = &p;
*pp = &b;//访问的是p,将p中的地址改为b的地址
**pp = 30;//访问的是b,因为p中存放的是b的地址
printf("%d\n", b);
}
4:指针数组
数组的基本定义是:存放相同类型元素的集合,所以指针数组是数组,里面的元素是指针
类比整型数组,字符数组,整型数组里面的元素是整形,字符数组里面的元素是字符
#include<stdio.h>
int main() {
int a = 10;
int b = 20;
int c = 30;
int* pa = &a;
int* pb = &b;
int* pc = &c;
printf("%p %p %p\n", pa, pb, pc);
int* arr[] = { &a,&b,&c };//指针数组,里面的元素是指针
printf("%p %p %p\n", arr[0], arr[1], arr[2]);
}