c语言地址不相同那指针保存,C语言指针专题——常见问题解答合集

1.指针是什么?

本问题我用基本数据类型跟指针做对比。

这恐怕是初学者遇到的最多的一个问题了。其实这个问题很好回答,指针是一个变量,跟基本数据类型变量有很多的地方都是一样的。下面用一个程序来类比指针变量与整型变量朋友们就知道了。

[cpp]#include

intmain(void)

{

inta = 1;

int*p = &a;

printf('整型变量a的值是%d\n', a);

printf('指针变量p的值是%x\n', p);

printf('整型变量a的地址是%x\n', &a);

printf('指针变量p的地址是%x\n', &p);

return0;

}

运行结果是:

118542726_1_20171209075056670

这段代码很好理解,我们从以下几个角度来对比指针变量与整型变量:

1). 变量的初始化

指针变量p与整型变量a都需要首先被声明,然后赋予一个初值。代码中,整型变量a的初值是1,指针变量p的初值是变量a的地址。

2). 变量的类型

在定义指针变量p和整型变量a时,都需要指出它们的类型。

整型变量a的类型是int,指针变量p的类型也是int。

整型变量a的int是指变量a不是字符型,不是浮点型,而是一个整型;

指针变量p的int不是说变量p是一个整型变量,而是说p指向的值,本代码中是变量a,是一个整型。

在变量的类型概念方面,指针变量与基本数据变量有差异。

3). 变量的值

本代码中,整型变量a在定义时给予一个初值是1,1就是变量a的值;

指针变量p在定义时也被给予一个初值,这个初值是变量a的地址,变量a的地址就是变量p的值。从运行结果上一眼就能看出来。

4). 变量的地址

整型变量a有自己的地址,指针变量p也有自己的地址。

从本代码运行的结果来看,整型变量a的地址是0x12ff44,指针变量p的地址是0x12ff40。

从以上4个方面来对比,可以发现,指针变量跟基本类型变量,很多方面都是相同的,就把指针变量当成一半的基本类型变量来理解好了,所以别看教材上说的很高达上,很高深,其实探明了本质,也就那样。

2.指针变量存放的是一个数值的地址吗?

本问题用基本数据类型来说明。指针变量存放的是基本数据类型的地址,换句话说,指针变量的值,肯定是一个数,这个数是基本数据类型变量的地址。在第一问中通过运行结果可以很容易的看出来。

3.指针变量签名加*号和不加*号的区别?

本问题用基本数据类型来说明。

这是很多人经常会搞混的问题。按照一般的说法,指针变量前面不加*号,输出的是指针变量自己的数值,前面加*号,输出的是另外一个数值,这个数值的地址就是指针变量自己的值。很晕是不是?看下面的代码:

[cpp]#include

intmain(void)

{

inta = 1;

int*p = &a;

printf('指针变量p前面加*,也就是*p的值是%d\n', *p);

printf('指针变量p前面不加*,也就是p的值是%d\n', p);

return0;

}

运行的结果是:

118542726_2_20171209075056780

从结果中可以看出以下2点:

1). 指针变量p前面不加*号,p输出的值是1244996,这个是变量p自己的值,也是整型变量a的地址;

2). 指针变量p前面加*号,*p输出的是1,也就是变量a的值;

*p和p的区别应该清楚了吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值