c语言入门:[30]指针初探
指针简单的说就是存储粝简肯惧内存地址的变量。
定义格式为:
数据类型 *指针变量名
例如
int *p;//p就是一个能够存储苻抽苍黪整型数据内存地址的指针变量
char *v;//v就是一个能够存储字符型数据内存地址的指针变量
请看下面的例子:
#include<stdio.h>
main()
{
int a=10;
int b=20;
int c=12;
int *p;//p是整型指针变量,能够用来保存整型内存地址
p=&a;//p里存储的是变量a的内存地址
printf("指针p里存储的内存地址为%p,指针p指向的那块内存里存储的整数是%d\n",p,*p);//*p是取出内存地址里的数据,这个在地址那节中讲过
p=&b;//p里存储的是变量b的内存地址
printf("指针p里存储的内存地址为%p,指针p指向的那块内存里存储的整数是%d\n",p,*p);
p=&c;//p里存储的是变量c的内存地址
printf("指针p里存储的内存地址为%p,指针p指向的那块内存里存储的整数是%d\n",p,*p);
}
指针支持++和--操作
++就是指针下移操作,--是指针上移操作,我们先看例子:
#include<stdio.h>
main()
{
int a=10;
int b=20;
int *p;
printf("变量a的内存地址为%p,变量b的内存地址为%p\n",&a,&b);
p=&a;
p++;//指针下移
printf("指针p指向的地址为%p,里面的数据是%d\n",p,*p);
}
p=&a;后指针p存储的是变量a的内存地址即0240ff24;
p++;后指针下移,所谓下移其实就是把p里存储的地址数据加4,为什么加4呢?因为P是整型指针,在我的电脑环境下一个整数空间就占四个字节,0240ff24+4=0240ff28
而地址为0240ff28的这块内存空间我们并不知道里面有什么,所以输出37814120也就不奇怪了。
这里要注意,你也许已经发现了,我虽然连续地定义了2个整型变量,但它们的地址却不一定是连续的。
我们之前学习的数组是存储一组数据的,数组元素的内存地址一定是连续的,我们再拿数组举例。
#include<stdio.h>
main()
{
int a[3]={10,20,30};
int *p;
p=&a[0];//p指向数组的第一个元素
printf("%p,%d\n",p,*p);
p++;//下移,指向数组的第二个元素
printf("%p,%d\n",p,*p);
p++;//再下移,指向数组的第三个元素
printf("%p,%d\n",p,*p);
}
我好像之前没介绍过16进制数,不过没关系,这里简单介绍下
10进制数加法是满10进1,16进制数就是满16才进1。
数组第一个元素的地址是0240ff18,
0240ff18+4是第二个元素的地址,16进制中用a来表示10,b表示11,c表示12......
8+4结果是12,0240ff18+4=0240ff1c 为数组第二个元素地址。
0240ff1c+4是第三个元素的地址
c+4结果是16应该进位了,0240ff1c+4=0240ff20 为数组第三个元素地址。
毕竟是初探,所以就讲到这里吧,不知不觉这一系列已经满30篇经验了,看我经验学习的同学还需要到网上找一些基础性的练习做一做,巩固知识的同时也开拓思维。
这一系列先到这,以后我会新开一个系列经验,不过还是c语言的。
。。。。。。。。。。。。。。。。。。。。。。。。