c语言 指针 和指针数组指针,C语言学习笔记--数组指针和指针数组

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

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

{

(*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

{

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

#include

//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

{

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

C语言学习笔记(一):数组传递时退化为指针

这几天闲来无事,写了一个数组元素排序函数如下: #include #include void ArraySort(int array[ ...

c语言学习笔记(9)——指针

指针是c语言的灵魂 ----------------------------------------------------------------------------- # include &l ...

Go语言学习笔记九: 指针

Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

Go语言学习笔记八: 数组

Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

GO语言学习笔记(一)

GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

Go语言学习笔记二: 变量

Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

Go语言学习笔记(1)——顺序编程

Go语言学习笔记这一堆主要是(人民邮电出版社)的读书笔记.中间会穿插一些零碎的点,比如源码学习之类的.大概就是这样吧. 1. 顺序编程 1.1 变量 变量的声明: var ...

Go语言学习笔记十: 结构体

Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

Go语言学习笔记七: 函数

Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

Go语言学习笔记四: 运算符

Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

随机推荐

JVM内存管理------GC简介

为何要了解GC策略与原理? 原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题.如果对GC策略与原理不了解的情况下碰到了前面所说的问题,很多时候会让 ...

解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题

在要输出的内容前先输出"\xEF\xBB\xBF", eg:要输出的内容保存在$content里$content = "\xEF\xBB\xBF".$conte ...

一篇不错的讲解Java异常的文章(转载)原作者已没法考证

六种异常处理的陋习 你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter ...

移动Web开发图片自适应两种常见情况解决方案

本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

263. Ugly Number(C++)

263. Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...

Android WebView的loadData方法注意事项

loadData()中的html data中不能包含'#', '%', '\', '?'四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码.需要如何处理呢?我们需要用Url ...

jQuery 实现无限任意添加下拉菜单

新学jQuery还有很多没学,今天做了个下拉菜单,按照自己的思想结合学的基础效果实现一款可以任意添加层数的下拉菜单,如果有什么建议,欢迎指教啦啦啦 我喜欢备注细一些,这样给自己也是一种理解和方便回顾哈 ...

记一次java heap space的解决办法

问题缘由:后台上传excel导入到数据库,数据量太大,导致报错. 解决方案: 用jdk自带的性能分析器(jconsole)查看了一下,当excel开始导入的时候,发现堆空间直接爆掉. 增加堆空间,在c ...

关于extern的用法

extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...

微信h5支付

分为 微信内H5调起支付 和 非微信浏览器H5支付. 1.H5支付(微信内) 参考链接:https://www.jianshu.com/p/6b9acdd10de6 2.JSAPI支付(非微信) 参考 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值