一,指针变量类型的意义
1,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
例如:char* 的指针解引⽤访问⼀个字节,int* 的指针解引⽤访问四个字节,short*的指针解引⽤访问两个字节。
二,指针+-整数
指针的类型决定了指针向前或者向后⾛⼀步有多大距离。
三,void* 指针
在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为无具体类型的指针(或者叫泛型指 针),这种类型的指针可以用来接受任意类型地址。
局限性:1,void* 类型的指针不能直接进行指针的+-整数。
2,解引用的运算。
四,const修饰指针
例:
#include <stdio.h>
int main()
{
int m = 0;
m = 20;//m是可以修改的
const int n = 0;
n = 20;//n是不能被修改的
return 0;
}
但是如果我们绕过n,使⽤n的地址,去修改n就能做到了。
注:
const修饰指针变量时:
• const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。• const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
五,指针运算
指针的基本运算有三种,分别是:
1,指针+- 整数2,指针-指针3,指针的关系运算
1,指针+- 整数
#include <stdio.h>
//指针+- 整数
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = &arr[0];
int i = 0;
int sz = sizeof(arr)/sizeof(arr[0]);
for(i=0; i<sz; i++)
{
printf("%d ", *(p+i));//p+i 这⾥就是指针+整数
}
return 0;
}
运行结果:
2,指针+-指针
//指针-指针
#include <stdio.h>
int my_strlen(char* s)
{
char* p = s;
while (*p != '\0')
p++;
return p - s;
}
int main()
{
printf("%d\n", my_strlen("abc"));
return 0;
}
运行结果:3
指针减指针得到的是指针之间的元素个数
3,指针之间的关系运算
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = &arr[0];
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
while (p < arr + sz) //指针的⼤⼩⽐较
{
printf("%d ", *p);
p++;
}
return 0;
}
运行结果:
指针之间的关系运算本质是比较大小