- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
指 针
概述
1.1 地址和指针的概念
如果在C语言中定义一个变量,系统会自动的给它存储空间。比如:int a,b,c;系统会自动的给a,b,c分别分配2个字节的空间,内存中的表示如下图:
这样以来,就建立了变量和地址的对应关系。如果产生赋值行为,比如:a=1,b=3;,存储图如下:
如果产生具体的操作,比如:c=a+b,具体的过程如下:
第一步:从2001-2002字节空间取出1;
第二步:从2003-2004字节空间中取出3;
第三步:将1和3相加后的结果4存入变量C所指向的地址空间(2005-2006),图例如下:
这样以来,请大家会议下面程序中的两个函数:
Main()
{
Int a,b,c;(定义变量,系统自动给变量分配存储空间-地址)
Scanf(%d,%d”,a,b);(:取地址操作。将输入的值,放到a,b所指向的地址空间)
C=a+b;
Printf(“%d”,c);(从变量C所指向的地址空间取出具体的值,并打印)
} 以上的程序,在C语言中称为“直接访问”。
既然有“直接访问”,肯定会存在“间接访问”,举例如下:
张三出差,住宾馆,房间号码为1001,从携带钥匙的方式上来看,有两种方式:
钥匙自己带(直接方式);
钥匙放在总台上,要开门,先到总台拿钥匙,而后开门(间接方式)
以上是生活中的例子,那么,在C程序中,如何表示这种“间接方式”呢?
第一步:定义一个普通的变量并赋值(int a=3;)
第二步:定义一种变量,用来存储变量a的地址(a_pointer);
第三步:建立该变量和普通变量之间的联系,将变量a的地址存储到a_pointer中。
第四步:通过该变量(a_pointer)来访问a;
程序如下:
main()
{
int a=3;
int *a_pointer;
a_pointer=a;
printf(%d,%d,%d,%d,a,*a_pointer,a,a_pointer);
getch();
}
一种示意图:
以上的图形象的表示了一种“指向关系”。“*”,表示指向。
在C语言中,一个变量的地址被称为该变量的“指针”,存储该变量地址的“东东”,称为指针变量。
故,指针是一个地址,而指针变量是存放该地址的变量,它用来指向“指针”所表示的地址。
1.2 指针变量的定义和使用
定义格式:
数据类型(基本型) *指针变量
比如:int *pointer_1;指针变量是pointer_1,而不是*pointer_1;
如果要在同一条语句中定义多个指针变量,正确的格式为:
Int *pointer_1,*pointer_2,*pointer_3; 不能写成:
Int *pointer_1,pointer_2,pointer_3; 有了以上的定义,pointer_1是我们定义的指针变量,*pointer_1是具体的内容。
(带*号,是内容,不带*,是地址)
main()
{
int *pointer_1;
int i;
pointer_1=i;
*pointer_1=3;
printf(%d,%d,i,*pointer_1);
getch();
} 从以上程序来看,*pointer_1和i是一回事。
到此为止,我们已经知道了指针变量的定义,既然变量定义了,就要使用,如何使用呢?
要想使用,必须理解连个运算符号:
:取地址运算符
*:指针运算(也称为“间接访问”运算符),取其指向的内容。
例子1:初窥
main()
{
int x=1000,y=100;
int *x_pointer,*y_pointer;
x_pointer=x;
y_pointer=y;
printf(%d,%d\n,x,y);
printf(%d,%d,*x_pointer,*y_pointer);
getch();
} 例子2:输入两个数,按大小顺序输出
第一种方法:值交换
main()
{
int a,b,t;
scanf(%d,%d,a,b);
if(ab)
{
t=a;
a=b;
b=t;
}
printf(%d,%d,a,b);
getch();
}
第二种方法:地址交换
main()
{
int *a,*b,t;
scanf(%d,%d,a,b);
if(*a*b)
{
t=*a;
*a=*b;
*b=t;
}
printf(%d,%d,*a,*b);
getch();
}
在指针定义和使用过程中的注意点:
1、变量必须已经说明过,类型要一致
Int *p=I
文档评论(0)