在详细说指针之前,先来聊一聊,C语言中的变量到底是什么东西。所谓的变量,只不过是一段内存空间的别名,那么,我们是否能直接操作该地址呢,对于这个问题,就引入了指针。指针,可以将其理解为一个变量,只是该变量值为地址。下面我们先来看一段代码。
#include<stdio.h>
int main(){
int i =5;
int* p = &i;
printf("%p\n", &i);
printf("%p\n", p);
printf("%d\n", *p);
*p = 10;
printf("%d\n", i);
printf("%d\n", *p);
return 0;
}
[lin@bogon C]$ ./a.out
0x7fff0bdc2834
0x7fff0bdc2834
5
10
10
这里,就直接使用指针来改变变量i的值,而且从输出结果来看,p中存的值与变量i在内存中的地址一样的,说明咱们的分析是正确的。
在指针声明的时候,*号表示所声明变量为指针。而在指针使用时,*号表示指针所值内存空间的值。
指针是一种特殊的变量,在进行整数的运算规则是
n+p = (unsigned int)p + n * sizeof(*p);
下面,我们来验证一下是否真的如此。
#include<stdio.h>
int main(){
int a[5] = {1, 2, 3, 4};
int* p = a;
printf("%p\n", p);
printf("%p\n",