找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2282|回复: 0
打印 上一主题 下一主题
收起左侧

C语言教程(6)-数组与函数指针

[复制链接]
跳转到指定楼层
楼主
ID:99082 发表于 2015-12-10 03:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

看到上边的图片里的代码了吗?

对这段

char* message[]={“hello”,“world”};

有感觉吗?


--数组


--声明一个数组

当我们需要很多很多的数据时,比如记录一个班同学的数学成绩,一个月的温度,当然常常是更多。那么这个时候还像前边说的那样一个一个的声明就很困难了。那么就需要一个新的工具来解决这个问题。

数组是由一系列类型相同的元素构成的。就像声明一个整数型一样,可以使用声明来告诉编译器您需要一个数组。

int states[50];

这个语句的意思是声明了一个50个整数的数组,批量声明是不是效率高了。方括号[]表示States这个标识符表示数组,方括号里边的数字说明这个数组最多能包含元素的数量。

states[0]是数组states的第一个元素,states[49]是第50个元素。告诉一个程序员数一百个数,伟大的程序员同志们一般都会从0数到99,哈哈,开个玩笑。

自然还可以这样声明

char code[12];//12个字符的数组

float candy[365];//365个浮点数的数组

--给数组赋值

同样像我们之前声明一个整数型的量,那之后一定要给它赋值,不然我何苦声明呢是吧。那声明了一个数组当然也要赋值。

参照我们之前了解的单个数值变量(有时也称为标量)的声明中用表示式来赋值,如下所示:

int a=1;

相似,我们可以通过下面的方式对数组赋值:

int a[8]={0,1,2,3,4,5,6,7};

可以使用花括号{}括起来的一系列数值来初始化数组。数值之间用逗号隔开,在数值和逗号之间可以使用空格。

这样数组a的第一个元素a[0]=0,依次类推。

除了这样赋值我们还能逐个的赋值,下边就用一段代码来举个例子:

#include <stdio.h>

#define SIZE 50//把SIZE宏定义为50

int main (void)//声明主函数

{

/*声明整数型数值count、数组evens*/

int count,evens[SIZE];

/*for循环*/

for(count=0,count<SIZE;count++)

/*通过循环执行来赋值*/

evens[count]=2*count;

}

大家可以自己先感受一下,学过C语言的同学读起来不应该困难。

--多维数组

例如要记录5个班每班30人的成绩的学生数学成绩,要声明怎样的数组呢?其实我们可以声明一个150个变量,使每一个变量代表一个学生的数学成绩,可那就体现不出5个班级了。但是我们也可以这样,可以设计5个数组,每个数组包括30个元素,这是一种比较笨的方法,而且如果要记录50个班的那就不合适了。

C语言为我们提供了这样的方法,我们可以使用一个数组,即主数组包含5个元素,每个元素代表一个班级。代表一个班级的元素是包含30个元素的数组。这种数组的数组,就是二维数组。可以用下面的方式声明:

int sf[5][30];//数学分数,我就简称sf了

赋值举例:

int a[2][3]={

{3,1,2},

{3,2,1},

};

如果第一列表中只要一个数,

int a[2][3]={

{3},

{3,2,1},

};

如果第一列表中只要一个数,则第一含只有第一个元素得到赋值,最后两个元素的被默认为初始化的0,。如果列表中的数多于3个,系统会报告错误,而且不影响下一行的赋值。


--函数指针


函数指针是指向函数地址的指针。就是利用利用该指针可以知道函数在内存中的位置。因此,也就可以利用函数指针调用函数。函数的声明方法是:

类型 (*指针变量名)(函数的参数列表)

比如我们需要对2个变量进行声明,第一个是函数指针fp,该函数指针变量指向一个入口参数为一个整数,返回值为另一个整数的函数;第二个是函数指针数组fp_array[],这个数组的每个元素都是一个函数的指针,这些函数指针指向入口参数为一个整数,返回值为指向整数的指针的函数,声明如下:

/*声明了一个函数指针变量fp,它指向一个入口参数与返回值都是整数的函数*/

int (*fp)(int);

/*声明了一个函数指针数组fp_array[],它的每个元素都是指向一个入口为整数,返回值为整数指针的函数*/

int *fp_array[10](int);

大家要注意:在函数指针声明中,函数的指针变量名必须写在一个括号内,如果我们省略了这个括号,那么这个声明的含义就完全不同,如:

int *fp(int);

上边的例子中第一行声明是一个函数fp(),该函数有一个整数型的参数并返回一个指向整数的指针。这是因为函数调用了运算符“()”的优先级高于运算符“*”,编译器首先会认为fp(int)是一个运算单位,这显然是一个函数。而对函数返回值做了取内容运算*(pf(int))的结果是一个整数int,因此fp是一个以整数型为入口参数、返回值为指向整数的指针的函数,而不是我们希望的声明得到的函数指针了。


用了六周的时间,介绍了一点点嵌入式编程C语言最基础的东西,只是展现了一个很粗略很粗略的框架,如果能和大家自学的收获有点共鸣或者让你有了自学C语言的想法,那就是最好的效果了。有同学说越来越难懂了,那是当然了,一眼就能看懂的那是韩剧,这毕竟工科知识,大家坚持坚持。但工科知识也不是硬推硬算、死记硬背,重要的是理解。


以下是本系列教程文章列表:欢迎大家踊跃讨论,有问题可在51黑论坛回帖提出.


C语言基础教程(1):http://www.51hei.com/bbs/dpj-41177-1.html
C语言教程(2)-关键字 变量:http://www.51hei.com/bbs/dpj-41178-1.html
C语言教程(3)-控制语句:http://www.51hei.com/bbs/dpj-41179-1.html
C语言教程(4)-运算符:http://www.51hei.com/bbs/dpj-41180-1.html
C语言教程(5)-函数:http://www.51hei.com/bbs/dpj-41181-1.html
C语言教程(6)-数组与函数指针:http://www.51hei.com/bbs/dpj-41182-1.html

51单片机教程:http://www.51hei.com/bbs/mcu-xuexi-1.html
STM32教程:http://www.51hei.com/bbs/dpj-41167-1.html
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表