指针的本质是一个变量,英文point,所以我们常在代码中用p来表示。
首先我们要明确内存被分为一个格一个格,大小呢则为一个字节(一个字节等于八比特bit),
而当我们要在内存上存放数据就要占用这些一个格一个格的内存条,为了方便我们知道存放在了哪一个位置所以我们会有一个编号(也叫做地址)。指针(point)是一个变量(我们之前学过变量的作用是储存数据),那么我们就可以明白了指针就是存放地址的一个变量(我们把存放在指针里的数据称为“地址”)。
int main ()
{
int a=10 ;(a占四个字节)
int *p=&a ;(一个内存格一个字节,那么a的地址是这四个字节里第一个字节的地址)
return 0;
}
//p即为指针变量 前面的*说明p的类型
对于以前我们学过的输入用法:scanf(" %d ",&x)其中的&是干什么的呢?
&是c语言中的一个运算符号,它的作用是获取变量的地址(内存条的编号),那么我们也就知道了&要与变量在一块才能获得这个变量的地址,而scanf这个函数的原函数意义就是把我们的“输入”输进这个内存格里面,而变量也无非就是具体的某个内存格而已。
这个时候我们把 : int*p=&x 来解读一下,这段代码就是把&x(即x的地址数据),储存到变量p(指针变量)上,而*号表明p是一个指针,p指向i表明说p的值就是i的变量的地址。
如果是int*p,q; 表示p是一个指针而q则是一个整型的一个常量,
但如果是int*p,*q; 则表示p和q均是一个指针。
对于数组:
a==&a[ ] 表达的意思是 a 的地址等于a[ ]的地址
例如:我们在前面定义的min,那么我们输入:
int min=10;
int*p=&min;
printf(" *p=%d ",*p);
printf(" p[0]=%d " ,p[0]); 他们输出的结果是一样的