三言两语,妙说《指针》。

三言两语,妙说《指针》。,第1张

三言两语,妙说《指针》。,第2张

指针是什么?-指针是一种数据类型。

形象地说,大家都知道“邮箱”和“邮箱里的信”的关系!其实就是“地址”(指针)和“地址的内容”(指针指向的内容)的关系!

如图:(耐心看,不耐烦跳过)

(我自己画的,有点粗糙,别怪我。)

在图中,描述了六个存储单元,它们的编号是从1000到1005的6个值,其中从1000到1005的编号是相应存储单元的地址。
数据存储在由地址标识的存储单元中。对应于地址1000至1005的存储单元用于存储数据。

续:把存储单元想象成“邮箱”,存储单元的数据就像“邮箱里的信”,存储单元的数量(地址)就像邮箱的数量。

(插入一小段,耐心看,不耐烦跳:如果程序中定义了一个变量,那么系统会在编译时为该变量分配一定数量的内存单元。一般情况下,系统会为字符型变量分配1字节存储空,为整型变量分配2字节存储空,为浮点型变量分配4字节)

总结:1 `地址起指向作用。2 `该变量的类型信息也隐含在地址中。

其实“指针”就是“地址”。通过“指针”,可以找到它所寻址的存储单元。变量的地址称为变量的指针。

超级推理:
-Center:变量的地址(指针)也是值。
→专用于存储变量地址的变量称为“指针变量”。
→所以“指针变量”的值是“指针”(一个变量的地址)。

指针的操作:指针就是地址。C中的地址是无符号整数。

对于指针变量,允许的主要操作有:1 '指针变量的赋值。2 '指针和整数之间的加法和减法。3 `指针之间的比较。4 `指针之间的加法和减法。
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

形象地说,大家都知道“邮箱”和“邮箱里的信”的关系!其实就是“地址”(指针)和“地址的内容”(指针指向的内容)的关系!

指针的概念更像是邮递员!


至于老k说的:指针不是地址,变量的值是地址。

解释:

你还记得高中数学中的一个概念吗:向量(物理学上叫向量)

向量有两个元素:方向和模长。

同样,指针是向量的计算机化(就像数组是序列的计算机化一样)

当定义了一个指针变量时,计算机给它赋值空,并用这个空来存储地址。

我们给一个变量赋值,那么这个空中存储的值就是这个变量的值。

同样,我们给一个指针变量赋一个地址(无符号整数),所以这个空中存储的地址就是这个指针变量的值。

而这个理念就是方向!

而模长的概念是*p!

也许有些人不能理解,我用C语言程序来说明:

我们经常使用指针来改变传递给自定义函数的值(参数),并让改变后的值返回到主函数!

而且这个改变的值是指针所指地址的改变值(红色部分代码)

而不是改变指针的指向(蓝色部分代码)!

# include
int main()
{
int * p,*q,a=1,b = 2;
int change(int *,int *);
p = & a;q = & b;
change(p,q);
printf("%d,%d\n ",*p,* q);
getch();
返回0;
}
int change(int *x,int * y)
{
int * z;
z = x;x = y;y = z;//这里改变了指针的地址,但是结果没有改变,因为指针的值就是地址,不会传回主函数
}

PS:

int change(int *x,int * y)
{
int z;
z = * x;* x = * y;* y = z;//它改变了指针所指的值,但没有改变指针的地址!
}

注意,如果蓝色部分由*z改为z(或者红色部分由z改为*z),则不可以!

因为int * z;然后用Z的空来存储地址。虽然你也可以认为这是可以通过的,但如果是智能编译器,它会警告你,如果不是智能的,它会报错。

所以请大家规范写作!

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 三言两语,妙说《指针》。

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情