C语言指针再现
前言
将近一年多没用碰C和C++的东西了,一直在做java和android的东西,学到android的jni开发的时候需要用到C和C++的东西,其中C和C++中最难的东西毫无疑问就是指针了,相信大家都有这种苦恼,即使学了也就是半懂不懂的状态。下面将用最简单的例子来说明下指针。
实现
代码如下:
#include<stdio.h>
#include<stdlib.h>
main(){
int i = 123;
//一般计算机中用16进制数来表示一个内存地址
printf("%#x\n",&i);
//int* int类型的指针变量 pointer指针 指针变量只能用来保存内存地址
//用取地址符&i 把变量i的地址取出来 用指针变量pointer 保存了起来
//指针pointer指向了i的地址
int* pointer = &i;
printf("pointer的值 = %#x\n",pointer);
printf("*pointer的值%d\n",*pointer);
*pointer = 456;
printf("i的值是%d\n",i);
}
运行结果如下:
0x62fe44
pointer的值 = 0x62fe44
*pointer的值123
i的值是456
下面做关键部分的解释:
int* pointer = &i;
这句代码的意思是定义一个指针变量pointer,并让其指向变量i的内存地址,也就是point里面存的就是变量i的内存,而*pointer里面存的就是pointer指向的内存里面所存的值,即i的值。
*pointer = 456;
这句代码的意思是修改pointer指向内存的值,所以最后i的值被修改成了456.