C 语言中的数组有自己特定的类型,数组的类型由元素类型和数组大小共同决定。(如 int array[5]类型为 int[5])

1.定义数组类型

C 语言中通过 typedef 为数组类型重命名:typedef type(name)[size];

(1)数组类型:如 typedef int (AINT5)[5]; typedef float (AFLOAT10)[10];

(2)数组定义:AINT5 iArray; AFLOAT10 fArray;

2.数组指针

(1)数组指针用于指向一个数组

(2)数组名是数组首元素的起始地址,但并不是数组的起始地址。

(3)通过将&作用于数组名可以得到数组的起始地址

(4)定义数组指针的两种方式:

①可通过数组类型定义数组指针:ArrayType* pointer;

②可以直接定义:type (*pointer)[n]; //其中 pointer 为数组指针变量名,type 为数组的元素类型,n 为数组的大小

#include <stdio.h>

typedef int (AINT5)[];       //数组类型:int[5]
typedef float (AFLOAT10)[]; //数组类型:float[10]
typedef char (ACHAR9)[]; //数组类型:char[9] int main()
{ AINT5 a1; //定义变量a1为int[5]类型的数组
float fArray[];//普通定义数组的方法
AFLOAT10* pf = &fArray;//合法。&表示取的是整个数组地址(相当于
//float[10]类型的数组指针。
ACHAR9 cArray; char(*pc)[] = &cArray;//定义pc指针,并指向cArray数组。类型一致,合法。
//char(*pcw)[4] = cArray;//错误,数组名cArray为首元素的地址(相当于char*)与pcw指针类型不匹配
char(*pcw)[] = (char(*)[])cArray; int i = ; printf("%d, %d\n", sizeof(AINT5),sizeof(a1));//4*5=20 for(i=; i<; i++)
{
(*pf)[i] = (float)i; //pf指向整个数组,即相当于&a。而*pf等价于(*&a),即相当于a
//即*pf等价于数组名fArray,所以表达式相当于fArray[i] = (float)i;
} printf("pf = %X, pf + 1 = %X\n", pf, pf+); //pf + 1,指向数组最后一个元素的后面 for(i=; i<; i++)
{
printf("%f\n",fArray[i]);//打印0到9
} printf("%p, %p ,%p\n", &cArray, pc+, pcw+);//pc+1==>(unsigned int)pc + 1*sizeof(*pc)
// ==>(unsigned int)pc + 1*9
//同理pcw + 1 = pcw + 4 return ;
}

2.指针数组

(1)指针数组是一个普通的数组,其中的每个元素为一个指针

(2)指针数组的定义:type* pArray[n];//其中的 type*为数组中元素的类型,pArray为数组名,n 为数组的大小(如 float* a[3])

#include <stdio.h>
#include <string.h> //sizeof(a)表示整个元素的大小
//a表示首元素地址,*a即取出第1个元素
#define DIM(a) (sizeof(a)/sizeof(*a)) //table指向一个指针数组,即每个元素为指针类型
int lookup_keyword(const char* key, const char* table[], const int size)
{
int ret = -; int i = ; for(i=; i<size; i++)
{
if(strcmp(key, table[i]) == )
{
ret = i;
break;
}
} return ret;
} int main()
{ const char* keyword[]={
"do",
"for",
"if",
"register",
"return",
"switch",
"while",
"case",
"static"
}; printf("%d\n", lookup_keyword("return",keyword,DIM(keyword)));//
printf("%d\n", lookup_keyword("main",keyword,DIM(keyword))); //-1 return ;
}

参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html

最新文章

  1. kafka - advertised.listeners and listeners
  2. 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件
  3. USACO 滑雪课程
  4. 天朝git的使用
  5. 三维网格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
  6. C++标准转换运算符reinterpret_cast
  7. 谈Objective-C Block的实现
  8. Socket与TcpClient的区别(转载)
  9. RMAN duplicate from active遇到ora-17167,ora-12154
  10. ipad在非viewport 1:1下缩放问题
  11. CSS背景颜色、背景图片、平铺、定位、固定
  12. Heritrix的安装与配置 (最新版 已测试通过)
  13. HDU 1027 Ignatius and the Princess II 选择序列题解
  14. java复习(7)---集合类、泛型
  15. mysql @value := 用法
  16. samba服务,连接远程开发机
  17. 020 Spark中分组后的TopN,以及Spark的优化(重点)
  18. AndroidStudio相关经验记录
  19. PCA (主成分分析)详解 (写给初学者) 结合matlab(转载)
  20. 基于Air800+Arduino+ESP8266的混合物联网开发

热门文章

  1. Flume-NG启动过程源码分析(一)(原创)
  2. JMeter 3.0 POST Body Data 中文乱码问题
  3. 判断一个浏览器是否支持opacity
  4. ​Php加速原理及工具试验
  5. DP的四边形优化
  6. wpf 界面平级之间设置上下顺序关系(ZIndex)
  7. 解决:git warning: LF will be replaced by CRLF in xxxx
  8. hdu1398 Square Coins(母函数)
  9. django1.7 HTML模板中{%url%}的使用
  10. 基于JQ的简单左右轮播图