什么是指针?

计算机中所有的数据都必须放在内存中,为了正确地访问这些数据,必须为每个字节都编上号码,我们将内存中自己的编号称为地址或 指针

如图,为4G 内存中每个字节的编号(以十六进制表示)。

定义:

数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。

先看一下如何输出一个地址:

#include<stdio.h>
int main()
{
int a=100;
char str[20]="c.biancheng.net";
printf("%#X,%#X",&a,str);
return 0;
}

运行结果如下:

%#X 表示以十六进制形式输出,并附带前缀 0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址,不需要加&。
假设变量c存储了字符‘k’,地址为0x11A,另有一个指针变量p,值为0x11A,这时 我们就称 p 指向了 c,或者说 p 是指向变量 c 的指针。

 指针变量和普通变量一样,可以被多次写入:

#include<stdio.h>
int main()
{
float a=99.5,b=10.6;
char c='@',d='#';
float *p1=&a;
char *p2=&c;
printf("%#X,%#X\n",p1,p2);
p1=&b;
p2=&d;
printf("%#X,%#X\n",p1,p2);
return 0;
}

运行结果如下:

假设变量 a、b、c、d 的地址分别为 0X1000、0X1004、0X2000、0X2004,下面的示意图很好地反映了 p1、p2 指向的变化:

注意:

以上述程序为例,*是一个特殊符号,表明一个变量是指针变量,定义一个指针变量时必须带上,而后续的赋值中则不能带,若带上了就表示给指针所指地址上的值赋值,同理若在输出时带上*,则输出的是数值而不再是地址。

如下:

#include<stdio.h>
int main()
{
int a=15,b=16;
int *p=&a;
printf("%d,%d\n",a,*p);
*p=b;
printf("%d,%d\n",a,*p);
return 0;
}

运行结果如下:

同时也说明了指针可以获取内存上的数据。

除此之外,指针还可以修改内存上的数据:

#include<stdio.h>
int main()
{
int a=15,b=99,c=222;
int *p=&a;
*p=b;
c=*p;
printf("%d,%d,%d,%d\n",a,b,c,*p);
return 0;
}


运行结果如下:

 

所以,指针即地址,但它的作用又不局限于地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值