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;
}
运行结果是:
这段代码很好理解,我们从以下几个角度来对比指针变量与整型变量:
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;
}
运行的结果是:
从结果中可以看出以下2点:
1). 指针变量p前面不加*号,p输出的值是1244996,这个是变量p自己的值,也是整型变量a的地址;
2). 指针变量p前面加*号,*p输出的是1,也就是变量a的值;
*p和p的区别应该清楚了吧。