C语言的那些小秘密之指针(一)

发表于:2011-9-09 09:53

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:bigloomy(CSDNblog)    来源:51Testing软件测试网采编

  懂得C语言的人都知道,C语言之所以强大,以及其自由性,绝大部分体现在其灵活的指针运用上。因此,说指针是c语言的灵魂,一点都不为过。所以从我的标题加了个(一)也可以看出指针的重要性,我尽可能的向大家交代清楚我对于指针的理解。所以在讲解的过程中我尽可能的用代码加文字的描述方式,通过代码的分析来加深我们对于指针的理解,我给出的都是完整的代码,所以读者可以在看的过程中直接copy下去即可运行,希望下面的讲解能够对你有所帮助。

  首先让我们来看看定义一个指针的一般形式为:

  基类型   *指针变量名

  看了上面的指针的定义形式,我们可能对于有些地方会有疑惑,如为什么要指定基类型呢?因为我们都知道整型和字符型在内存中占的字节数是不相同的,当我们进行指针的移动和指针的运算时,如果指针指向的是一个整型变量,那么指针移动一个位置就是移动4个字节,但是如果指针指向的是一个字符型的变量,那么指针移动的就是一个字节,因此我们必须规定指针变量所指向的基类型。

  为了不枯燥的讲解我们来看看下面的代码吧。(注意:所有代码均使用vc6编译运行,所以可能有的规则跟C语言的稍有区别

#include <stdio.h>

int main()
{
 int a,b;
 int *pointer_1,*pointer_2;
 a=100;
 b=200;
 pointer_1=&a;
 pointer_2=&b;
 printf("--------------------变换前-------------------\n");
 printf("a=%d\tb=%d\n",a,b);
 printf("*pointer_1=%d\t*pointer_2=%d\n",*pointer_1,*pointer_2);
 *pointer_1=300;
 int c=500;
 pointer_2=&c;
 printf("--------------------变换后-------------------\n");
 printf("a=%d\t*pointer_1=%d\n",a,*pointer_1);
 printf("c=%d\tb=%d\t*pointer_2=%d\n",c,b,*pointer_2);
}

  运行结果如下:

  在此我们定义了两个整型指针int *pointer_1,*pointer_2;,它们分别指向变量a和b,值得注意的是*pointer_1和a、*pointer_2和b是共用同一个存储空间的,当我们在接下类的代码中改变 *pointer_1=300;时,由输出就可以看出来a的值也跟随发生了改变。但是当我们声明了一个 int c=500;之后,使用pointer_2=&c;,b的值不变,仅仅是改变*pointer_2,因为我仅仅是改变了*pointer_2指向了c的存储空间,如果有有兴趣的读者可以自己验证下如果我们修改了a的值之后*pointer_1的值会跟随一起改变,因为他们指向的是同一个存储空间。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号