- 指针常见错误
## 观察指针常见错误1 ##
/****************************************************
*时间:2016.8.19 11:14
*功能:观察指针常见错误1:解引用未初始化的指针
*目的:通过程序更深入了解指针
****************************************************/
#include <stdio.h>
int main(void)
{
int * p; //声明一个指向int类型的指针变量p(PS:未初始化)
int i = 5;
*p = i; //把i的值存储在p所指向的位置
printf("%d\n",*p);
return 0;
}
//解引用未初始化的指针p,因为p未初始化,所以其值是一个随
//机值,所以不知道i的值会存放在哪个位置,可能不会出错,也
//可能会擦除或者改写数据或代码,导致程序崩溃
## 观察指针常见错误2 ##
/****************************************************
*时间:2016.8.19 11:40
*功能:观察指针常见错误2
*目的:通过程序更深入了解指针
****************************************************/
//指针常见错误2
#include <stdio.h>
int main(void)
{
int i = 5;
int *p;
int *q;
p = &i;
*q = p; //error,类型不一致
*q = *p; //error,解引用未初始化的指针
p = q; //okay,q未初始化,把q的随机值赋值给q,但无意义
q = p; //okay
printf("%d\n",*q); //声明时为q分配了内存,所以可以对q进行读写操作
//未分配存储数据的内存,所以不可以对*p进行读写操作
}
小结
1、指针的重要性:
1) 能够处理复杂的数据结构
2) 使函数返回一个的值
3) 能够直接访问硬件
4) 能够方便的处理数组和字符串
5) 是理解面向对象中引用的基础
总的来说:指针是C语言的灵魂
2、地址
1) 内存单元的编号
2) 从零开始的非负整数
3) 范围:4G([0-4G-1],一般是32根地址线,即2^32 = 2^30 * 2^2 =
1G * 4 = 4G)
3、指针
1) 指针就是地址,地址就是指针
2) 指针变量就是存放内存单元编号的变量,或者说是存放地址
的变量
3) 指针的本质就是一个‘操作受限’的非负整数
(只可以进行减法运算,其他可以进行,但是毫无意义)