C语言入门教程

在C语言中,数组与指针的关系十分密切。要想有效地使用数组,您需懂得如何借助指针。而做到将二者的关系了如指掌,恐怕得花上数天的时间学习和试验,但这种努力决不会白费。

让我们从一个C数组的简单例子开始:

#define MAX 10

int 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.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; ia[i]=i;

printf("%dn",*p);}

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 *q++ = *p++, i++);

指针p或q在数组a或b中越界了怎么办?C才不管——它会继续漫不经心地递增p和q,肆无忌惮地边复制边覆盖掉别的变量。C会将数组越界认为是程序员有意为之,因此在访问数组时需要谨慎。

有两种方式可将一个数组(如a或b)传给函数。假设某dump函数接受一个整型数组为参数并将数组内容在标准输出上打印。这两种编写dump的方式为:

void dump(int a[],int nia)

{int i;for (i=0; iprintf("%dn",a[i]);}

或:

void dump(int *p,int nia)

{int i;for (i=0; iprintf("%dn",*p++);}

变量nia(number_in_array,数组元素数目)用于确定数组的大小。请注意传入函数的只是一个指向数组的指针,而不是数组的内容。另外请注意,C函数能接受可变大小的数组作为参数。

指针操作数组c语言,C语言入门教程-用指针操作数组相关推荐

  1. c语言指针易错情况,C语言/C++从入门到精通之指针易错点总结

    指针是C语言的灵魂,所以学好指针很关键,本篇主要介绍了C语言/C++从入门到精通之指针易错点总结,通过具体的内容向大家展现,希望对大家C语言/C++的学习有所帮助. 学习C语言肯定会碰到指针,指针是C ...

  2. R语言七天入门教程六:文件相关操作

    R语言七天入门教程六:文件相关操作 一.文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作.在R语言中,用到最多的文 ...

  3. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  4. R语言七天入门教程二:认识变量与运算符

    R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...

  5. R语言七天入门教程三:学习基本结构

    R语言七天入门教程三:学习基本结构 一.编程的语言的基本结构 1.三种基本结构 绝大多数编程语言,都有三种最基本的程序结构:顺序结构.分支结构.循环结构.这三种结构的流程图如下所示(从左至右依次为:顺 ...

  6. R语言七天入门教程五:认识并使用函数

    R语言七天入门教程五:认识并使用函数 一.什么是函数 在编程语言中,如果有一段代码需要在多次重复使用,除了复制粘贴外,还可以将其写成一个函数.函数可以很方便地实现代码复用,对于复杂的程序功能,可以将其 ...

  7. C语言 指针和数组区别 - C语言零基础入门教程

    目录 一.前言 二.指针和数组区别 1.通过 sizeof 获取大小 a.计算数组大小 b.计算指针大小 2.指针和数组赋值方式不同 a.指针赋值 b.数组赋值 3.指针是指针变量,数组是指针常量 三 ...

  8. C语言 指针数组和数组指针区别 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组和数组指针区别 1.指针数组 2.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> ...

  9. C语言 数组指针 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.数组指针 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 1.数组 ...

  10. C语言 指针数组 - C语言零基础入门教程

    目录 一.简介 1.数组 2.指针 3.指针和数组区别 二.指针数组 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.简介 1.数组 ...

最新文章

  1. 我一个普通程序员,光靠GitHub打赏就年入70万,要不你也试试
  2. power designer 使用vba实现自动化操作学习
  3. HDU 1561 The more, The Better (树形DP,常规)
  4. 前台提示_提示一下大家,如果考试科目不合格,可以到前台自助机查询
  5. 老股民经验之谈 这些股票买入必死无疑
  6. boost::callable_traits的is_reference_member的测试程序
  7. 2013/8月读书计划
  8. nginx将9000端口转发映射至 8080
  9. python 追加到字典_使用Python读取,写入和解析JSON
  10. Linux信号处理机制
  11. java编码规范右大括号换行_java编码规范摘选
  12. PHP----练习-----新闻管理----增删改查
  13. 2019年最好的前端进阶课,合同保障不过20w年薪全额退款!
  14. 小米手机微信指纹支付上传服务器吗,为什么小米手机不支持微信指纹支付,客服这样回答...
  15. .第一天.net 学习理论
  16. request.get_full_path() 和request.path区别
  17. 适合android平板的浏览器,推荐5款安卓平板Pad版应用浏览器
  18. pythonds18b20_[python]树莓派第一课之DS18B20温度传感器
  19. Mysql数据库root密码管理四法
  20. 公务员没考上……我做了投资

热门文章

  1. html配色插件,【插件技巧】设计师必备配色max插件
  2. Unity 3D 特效学习记录
  3. 【FPGA】基于VGA的图像显示
  4. go-fastDFS 分布式文件系统搭建(实现梳理)
  5. 第二届广东省大学生网络攻防大赛 simple_re
  6. 激光雷达电力巡基于机载激光雷达技术的输电线路树障普查及预警
  7. 合成分红游戏源码_趣合成app开发(现成源码演示案例)
  8. vant 做表格_vue实现简单表格组件
  9. PDF能编辑吗,怎么添加PDF水印
  10. Excel做文件归档