指针分类
指针就是地址,指针变量是保存地址的变量;
指针功能有两个,通过地址访问数据对象,和通过地址修改数据对象。 我将指针分为以下几类:
1. 野指针
是指未初始化的指针,非常危险,所建议初始化为Null;
2. 半指针
const int * p1
无法通过指针修改数据对象
是这样理解的:
* 指针指向int
类型
* int
类型被声明为const
const
关键字
将变量变为只读模式,无法被修改。可以理解为:锁定写的权限。例如:
const int a = 1; a++; //报错,无法自增
3. 半指针
int const *p2
无法修改地址,指针只能指向一个对象
是这样理解的:
* 指针指向const
类型
* const
被声明为int
4. 死指针
const int const *p3
既无法修改地址,也无法通过指针修改对象的值
代码清单如下
#include <stdio.h>
const int data1[2] = { 100, 200 }; //数组元素被锁定,无法被修改
int data2[2] = { 300, 400 };
int data3 = 500;
int main(void)
{
int * p1; //普通指针
const int * p2; //半指针1,能修改地址,无法通过指针修改对象值
int * const p3 = data2; //半指针2,无法修改地址,能修改对象值
//1、普通指针和const数组
p1 = data1;
printf("p1 = %p\n", p1);
printf(" *p1 = %d\n", *p1);
//警告:assignment discards 'const' qualifier from pointer target type
//意思为:指针丢掉“const”限定符
/* *p1 = 500; //错误
printf(" *p1 = %d\n", *p1);
*/
//2、半指针1和普通数组
p2 = data2;
// *p2 = 500; //错误
// printf(" *p2 = %d\n", *p2);
data2[0] = 500; //正确
printf(" *p2 = %d\n", *p2);
//3、半指针1和const数组
p2 = data1;
/*
*p2 = 500; //错误
printf(" *p2 = %d\n", *p2);
data1[0] = 500; //错误
printf(" *p2 = %d\n", *p2);
*/
//4、半指针2和普通数组
// p3 = &data2[1]; //错误
printf(" *p3 = %d\n", *p3);
// p3 = data1; //错误,无法再指向别的数组
printf(" *p3 = %d\n", *p3);
return 0;
}
2018.08.15 安徽滁州