指针的本质
C语言指针的本质就是地址,就是计算机中存储的各个变量的内存空间的地址。我们可以通俗的理解指针就是地址,地址就是指针。
看以下代码。
int a=10//在内存中开辟了一块空间,里面存的是整形变量10这个数字
int *p=&a;定义了一个指针变量,将a的地址存在指针变量里面。
使用图片的方式来帮助各位读者进行理解
定义了一个变量a。里面存储了一个数字10,下面的0x1999就是这一块内存的地址。然后定义了一个指针变量,里面存储的数字就是变量a的地址。这里需要非常注意的一个地方是,指针变量本质上也是一个变量,指针变量的本身也是有地址的,就是写在下面的0x5000,很多新手没有理解这一点,因而遇到指针就头疼。
让我们来编写一段程序体现上面所说的一句话。编译环境VS2012;
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a=10;
int *p=&a;
printf("a的值是 %d\n",a);
printf("直接对a进行取地址 ,a的地址是 %p\n",&a);
printf("通过p来查看a的地址 %p\n",p);
printf("指针变量p的自身地址 %p\n",&p);
system("pause");
return 0;
}
`
查看其输出结果。
指针变量本身也是一个变量,只是他存储的是一个地址罢了,他与其他的变量没有任何本质上的区别,切记,切记,切记。
指针的使用
如果理解了前面的部分,其实对于一些日常的使用来说,已经是不难的了。
在这里只写一点指针和结构图的关系,毕竟数据结构才是使用指针非常多的地方。
struct person
{
int age;
char name[20];
};
这定义了一个关于人的年龄和名字的结构体,里面存了两个变量。
struct person person1,*person2;
person2=&person1;
在主函数里面定义了两个结构体的变量。并且将第一个的地址赋值给了第二个。
需要注意的是,该结构体占用的内存是很大的,因此指针变量里面存的并不是整个的地址,只是一个首地址。通过该首地址就可以访问整个结构体。