C语言入门教程-用指针操作数组
[09-12 13:07:57] 来源:http://www.88dzw.com 电路基础 阅读:8674次
文章摘要:C语言入门教程在C语言中,数组与指针的关系十分密切。要想有效地使用数组,您需懂得如何借助指针。而做到将二者的关系了如指掌,恐怕得花上数天的时间学习和试验,但这种努力决不会白费。 让我们从一个C数组的简单例子开始: #define MAX 10int main(){int a[MAX];int b[MAX];int i;for(i=0; ia[i]=i;b=a;return 0;}录入上面的代码并编译。您会发现代码不能编译。如果要将a复制给b,您需要像下面这样写: for (i=0; ib[i]=a[i];或更简练地写为: for (i=0; i更好的方法是使用string.
C语言入门教程-用指针操作数组,标签:电子电路基础,模拟电路基础,http://www.88dzw.comC语言入门教程
在C语言中,数组与指针的关系十分密切。要想有效地使用数组,您需懂得如何借助指针。而做到将二者的关系了如指掌,恐怕得花上数天的时间学习和试验,但这种努力决不会白费。
让我们从一个C数组的简单例子开始:
#define MAX 10
int main()
{
int a[MAX];
int b[MAX];
int i;
for(i=0; i
a[i]=i;
b=a;
return 0;
}
录入上面的代码并编译。您会发现代码不能编译。如果要将a复制给b,您需要像下面这样写:
for (i=0; i
b[i]=a[i];
或更简练地写为:
for (i=0; i
更好的方法是使用string.h中的memcpy函数。
从技术上说,变量a和b本身并不是数组,这是C语言中数组的不寻常之处。它们其实是指向数组的固定指针。a和b永久指向各自数组的第一个元素——它们保存的分别是a[0]和b[0]的地址。既然是固定指针,您就不能修改它们保存的地址。因此不能用a=b;这样的语句。
因为a和b是指针,您可以用指针和数组做一些有意思的事情。例如,下面的代码是正确的:
#define MAX 10
void main()
{int a[MAX];int i;int *p;
p=a;for(i=0; i
printf("%d
p=a;p=a;这条语句是合法的,因为a是一个指针。严格地说,a指向实际数组的第0号元素的地址。此元素为一整数,故a是一个指向单一整数的指针。因此,可以声明p为一个指向整数的指针并令其等于a。用p=&a[0];替换p=a;是完全等价的。因为a保存的是a[0]的地址,所以a和&a[0]是相同的。
下图显示了刚好在for循环开始执行之前的变量状态:
![]() |
现在既然p指向了a的0号元素,您可以进行一些特别的操作。变量a是一个不可修改的固定指针,而p却不受这种限制。其实C鼓励您利用指针运算来移动p。例如,如果您写p++;,而编译器知道p指向一个整数,所以p就会被增加适当的字节,移动到指向数组的下一个元素。如果p原来指向的数组元素是100个字节大小的结构体,p++;会将p移动100个字节。C会自动处理元素大小的细节。
您也可以使用指针将数组a复制给b。下面的代码可以用来代替
(for i=0;i
p=a;q=b;
for (i=0; i
{*q = *p;q++;p++;}
以上代码可以简化为:
p=a;
q=b;
for (i=0; i
*q++ = *p++;
并进一步简化为:
for (p=a,q=b,i=0; i
指针p或q在数组a或b中越界了怎么办?C才不管——它会继续漫不经心地递增p和q,肆无忌惮地边复制边覆盖掉别的变量。C会将数组越界认为是程序员有意为之,因此在访问数组时需要谨慎。
有两种方式可将一个数组(如a或b)传给函数。假设某dump函数接受一个整型数组为参数并将数组内容在标准输出上打印。这两种编写dump的方式为:
void dump(int a[],int nia)
{int i;for (i=0; i
printf("%d
或:
void dump(int *p,int nia)
{int i;for (i=0; i
printf("%d
变量nia(number_in_array,数组元素数目)用于确定数组的大小。请注意传入函数的只是一个指向数组的指针,而不是数组的内容。另外请注意,C函数能接受可变大小的数组作为参数。
- 上一篇:C语言入门教程-字符串
《C语言入门教程-用指针操作数组》相关文章
- › C语言入门教程-二进制文件
- › C语言入门教程-打开文本文件
- › C语言入门教程-读取文本文件
- › C语言入门教程-指针
- › C语言入门教程-为什么要用指针?
- › C语言入门教程-指针基础
- 在百度中搜索相关文章:C语言入门教程-用指针操作数组
- 在谷歌中搜索相关文章:C语言入门教程-用指针操作数组
- 在soso中搜索相关文章:C语言入门教程-用指针操作数组
- 在搜狗中搜索相关文章:C语言入门教程-用指针操作数组
编辑推荐
- · 什么是系统仿真
- · 什么是CPCI
- · 英特尔 Parallel Composer入门
- · 什么是支持数据库,什么是中宏数据库
- · 什么是数据交换技术
- · 什么是内部数据传输率
- · 什么是空间数据交换中心
- · 什么是差异备份
- · 什么是备份集
- · 什么是映像备份
- · IGBT模块
- · 什么是24脉波整流变压器
- · 自动变速器不能强制降挡故障原因、诊断与排
- · 什么是MD机
- · 中心频率,什么是中心频率
- · 功率单位mw和dbm的换算表
- · 中值滤波模块设计思路
- · 反馈振荡器的原理
- · 气体激光器简介
- · 数制与进位记数法