c语言循环运用用指针,C语言中指针的运用.doc

C语言中指针的运用.doc

C语言中指针的运用

【摘要】C语言是一种被广泛应用的计算机程序设计语言,“指针”是C语言的精华,是教学的重点和难点,同时又是学好C语言的关键。本文对数组与指针、字符串与指针、函数与指针等在程序设计中的灵活运用作了探讨。

【关键词】C语言;指针;数组;字符串;函数

C语言把内存存储单元的地址视为一种数据类型,而地址起到指向某个存储单元的作用,因此常称地址为“指针”,即指针就是地址。指针变量是用于存放指针(即地址)的变量,该变量的值是一个指针,一个要访问对象的地址。在C语言中,引入指针变量的目的主要是用来间接访问数据对象,有效地表示复杂的数据结构。例如:设有指向整型变量的指针变量p,要求指向整型变量a,那么用C语言可描述为:

int a=100;/*定义整型变量a,并赋初值100*/int*p=&a;/*定义指针变量p,并将变量a的地址送给p*/用图表示为:

要存取变量a的值,有两种方法可以完成。一种可通过变量名直接对内存单元进行存取操作,这种方式称为直接访问。另一种方式:先找到存放“a的地址”的变量p,从中取出a的地址(2000),然后到这个地址中对a进行存取a的值,这种访问方式称为间接访问。通过对变量p进行取内容运算*p值就得到a的值100。

有时为了方便,常将指针变量简称为指针。正确而灵活地运用指针不仅能够提高效C程序的效率,而且能有效地表示复杂的数据结构。所以指针的主要用途有:进行指针运算;引用数组元素;使用字符串;作为函数参数,实现地址传递;处理链表等等。

1.指针运算

指针的运算主要指指针的算术运算,其实质就是指向的地址发生变化。指针实际增(减)多少由指针的类型决定。指针加上(或减去)一个整数n,表示将指针由当前位置移动到后面(或前面)的第n个数据处。两个指针相减,表示两指针所指向的地址相减。得到两指针之间数据的个数,结果是一个整数,而不是地址值。如:

int a[5]={2,4,6,8,10};/*定义一个整型数组a并初始化*/

int*p=a,*q=a;/*定义指针p和q,均指向a数组的首地址*/

当p=p+2时,表示将指针p向后移动的二个数据,移向了a数组中第3个数组元素(即6),p-q结果为p与q这两个指针之间数据的个数等于2。利用这个特点,若将p指向数组a的首地址,将p移到a数组的末尾,则用p-q就可以求出数组a的长度,即a中数据的个数。

2.数组与指针

数组在内存中占据一块连续的存储区,数组名代表这个区域的起始地址,即数据名是一个指向该数组首地址的常量指针。当指针指向一维数组首地址后,C语言可有4种直接访问该数组的第i个元素的方法:“数组名[i]”,“指针名[i]”,“*(指针名+i)”,“*(数组名+i)”。前两种使用了数组的下标,称为“下标法”。后面两种使用指针运算符,称为“指针法”。

如:int a[10],*p=a;

则:对数组元素a[i](0<=i<=9)有四种等价访问方法:

a[i]或p[i](下标法);*(a+i)或*(p+i)(指针法)

例如:以下程序有两个功能完成的函数(计算数组中各元素值的总和)。

int sum1(int a[],int n)/*函数1*/

{int sum=0,*p,*q=a+n;

for(p=a;p

sum+=*p;

return(sum);

}

int sum2(int a[],int n)/*函数2*/

{int sum=0,i;

for(i=0;i

sum+=a[i];

return(sum);

}

main()

{int a[5]={2,4,6,8,10};

printf(“%d”,sum1(a,5));

printf(“%d”,sum2(a,5));

}

上述主程序分别调用sum1()和sum2(),调用结果都为30,说明sum1()与sum2()功能完成相同,从表面看来,函数2似乎比函数1简单、直观,但其执行速度sum1比sum2要快,效率要高。

3.字符串与指针

访问一个字符串,除了用字符数组外,还可以定义一个字符指针,用字符指针指向字符串中的字符。如:char*p=“C Program”;这样,可以方便地用字符指针p来处理字符串。

如:打印图案:

*

**

***

****

*****

下面3个程序都能实现”

程序1:

main()

{int i,j;

for(i=1;i<=5;i++)

{for(j=1;j<=i;j++)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值