什么是指针?
在了解指针之前先要弄清楚地址的概念。
如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。编译系统根据城西中定义的变量类型,分配一定长度的空间。例如:整型变量分配4个字节,字符型分配1个字节,单精度分配4个字节等。内存区的每一个字节有一个编号,这就是"地址编号”,它就相当于旅馆中的房间号,每一个房间都可以看作一块内存区域,都可以用来存放东西,我们给每个房间都编一个房间门牌号,用于更好的区分每一个房间,内存中也是一样的,整个内存由很多个字节组成,每个字节都有其对应的"房间号”,这就是"地址"了。通过这个"房间号"就可以找到其对应的"房间”,然后就可以从房间里取东西,或者把东西放进房间里了。
理解了地址的概念之后,那所谓的指针,从根本上看,就是一个值为内存地址的变量(或数据对象),也就是地址的编号,可以把"指针指向地址"理解成"用小本本把房间号记下来",那这个小本本就相当于一个用于记房间号的指针了,一个变量的地址称为此变量的"指针"。
示例1
nurse = 22;
ptr = &nurse; //指向nurse的指针
value = *ptr //把ptr指向的地址上的值赋给val
执行以上三条语句的最终结果是把22赋给val
示例2(声明指针)
int *pi; //pi是指向int类型变量的指针
char *pc; //pc是指向char类型变量的指针
int*pi;声明的意思是pi是一个指针,*pi是int类型
运行示例(指针b访问到a):
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int a = 20;
int* b = &a;
printf("a:%d\n", a);
printf("b:%d", *b);
return 0;
}
指针常量与指针变量
有上面的基础后,能看懂下面代码及其注释,基本上算入门了。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int a = 0; //指针常量,该地址不变
printf("&a:%p\n", &a); //a的地址
printf("a:%p\n", a); //a的值
//类型名 * 指针名 类型名=》基类型
int* p = &a; //指针变量
printf("&p:%p\n", &p);//指针自己的地址
printf("*p:%p\n", *p);//指向的地址中的值
printf("p:%p\n", p);//指向的地址
return 0;
}
运行结果: