指针的类型决定了,对指针解引用的时候有多大的权限(一次能操作几个字节)
比如:char*的指针解引用就只能访问一个字节,而int*的指针解引用就能访问四个字节
void*指针
泛型指针,可以接受任意类型的地址
局限性:void*不能直接进行指针的+-整数和解引用的运算
比如: int a = 10;
void* pv = &a; //正确
*pv = 20; //错误
pv++; //错误
const-常属性(不能改变)
#include<stdio.h>
int main()
{
const int n = 10;//n是不能被修改的
//n在C语言中被称为:常变量
//常变量的意思是,n的本质是变量,但是不能被修改
n = 100;
printf("%d\n",n);
return 0;
}
n = 10(不变)
#include<stdio.h>
int main()
{
const int n = 10;
int* p = &n;
*p = 100;
printf("%d\n",n);
return 0;
}
此时n = 100,绕路改变了n
const可以修饰指针变量
const可以放在*的左边:const int * p; 或者 int const * p
此时const限制的是*p,也就是指针指向的内容不能通过p来修改了,但是p变量本身是可以修改的(修改p的指向)*p = 100;(err) p = &b;(ok)
const放在*的右边: int* const p; 此时与放在左边恰恰相反,限制的是指针变量p本身
*p = 100;(ok) p = &b;(err)
当左右两边都有const时,即 const int* const p = &n;
*p = 100;(err) p = &b;(err)