c语言入门:[30]指针初探

2025-05-21 16:17:10

指针简单的说就是存储粝简肯惧内存地址的变量。

定义格式为:

数据类型 *指针变量名

例如

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);

}

c语言入门:[30]指针初探

指针支持++和--操作

++就是指针下移操作,--是指针上移操作,我们先看例子:

#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);

}

c语言入门:[30]指针初探

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);

}

c语言入门:[30]指针初探

我好像之前没介绍过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语言的。

。。。。。。。。。。。。。。。。。。。。。。。。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:59
  • 阅读量:86
  • 阅读量:80
  • 阅读量:28
  • 阅读量:35
  • 猜你喜欢