指针是C和C++中和重要的组成部分,怎么理解指针呢?首先来看一下内存、指针和变量的关系。
内存可以比作是很多很多已经编号了的小球,你想用内存的时候就要知道小球的编号。比如说int i,这是一个整型变量,占用4个字节。如果每一个小球就是一个字节的话,那么就需要使用四个小球。变量连续的存储在内存中。
程序代码进行执行的过程中,比如在执行两个整型变量i、j相加的时候,首先去寻找 i 的首地址,从该地址开始读取4个字节的数据放入CPU中,然后去寻找 j 的首地址,再从 j 首地址开始读取4个字节数据存入到CPU中,然后再跳入到加法中断中进行计算。
内存清楚之后,再来看指针。很简单,地址指向内存中的字节,这个地址就是指针。一个变量的地址就是这个变量的指针。如果说A变量存放着B变量的地址,那么A变量就是指针变量,即指针。
首先来看一个指针:
int *p;
int i = 100;
p = &i;
p是指针变量名,&为取地址符号。p = &i 就是取 i 的地址给指针变量 p 。
对于指针来说,一定要有一个明确的地址指向。不可以对指针变量 p 进行直接赋值,更不可将*p当作变量来使用。
#include<iostream>
using namespace std;
void main()
{
int i = 100;
int* p;
*p = 100; //当作变量来使用*p时
printf("%d", p); //输出地址,出错语句
printf("%d", *p);//输出指针指向的值,出错语句
}
这是一段错误代码,原因在于*p被当作变量来使用了。