指针和数组
来源:互联网 发布:2016开淘宝店晚不晚 编辑:程序博客网 时间:2024/05/01 23:14
为了下面更好的分辨指针数组混合概念,我们首先辨析一下什么是指针,什么是数组
指针:
int *p;
这段代码在内存上开辟出四个字节的空间,然后把这四个字节大小的空间命名为p,同时限定这四个字节的空间只能存储某个内存的地址,即使存入别的任何数据,都会被当作地址来处理,且限定存int类型的数据,为了更好的理解这个概念我们图示来解释一下
指针p指向地址为0x000012ff的内存
数组
int a[5];
定义了一个数组,其中包含五个int类型的数据
数组示意图
指针数组和数组指针
指针数组:其实我们可以叫做指针的数组,通过汉语语法分析,我们知道“指针的”是修饰数组的,所以说指针数组本身是一个数组,其中存放的每个元素类型为指针类型,
数组指针:其实我们可以叫做数组的指针,同样的我们知道它首先是一个指针,它指向的是一个数组。
int *p1[10];
int (*p2)[10];
上面这两个都定义包含了数组指针和指针数组的定义,那到底谁是谁呢?对于这个问题我们首先需要搞清楚"[]"的优先级比"*"高,
第一个定义首先和方括号结合,当然是指针数组,它代表数组包含十个元素,其中每个元素的类型是int*;第二个由于"()"可以改变优先级,所以它优先和"*"结合,所以它是数组指针,它代表指针指向一个有十个元素,其中每个元素都是int类型的数组。
函数指针
有了之前的铺垫,我们接下来给出函数指针的定义
void(*fun)(int,int)
它的含义是fun指向返回值为空,参数有两个且类型均是int类型的函数,
int Add(int a,int b)
{
return a+b;
}
int main()
{
int (*fun)(int,int)=Add;
printf("%d\n",fun(1,2));
}
函数指针数组
定义void(*fun[n])(int,int)
[]优先级高,与fun结合,首先它是一个数组,数组内存放了n个函数指针。比如说有时候我们如果需要在一个循环中,每次调用不同的函数(这些函数的返回值和参数相同,函数名不同,实现不同),那么就可以使用函数指针数组来使代码更加简练和易读。、
函数指针数组
定义 void ( * (*fun)[3])(int,int);
这个指针指向一个包含了3 个元素的数组;这个数组里面存的是指向函数的指针;这些指针指向一些返回值类型为void的指针、参数为整形的函数。
其实也好理解,这里的函数指针数组指针不就是一个指针嘛。只不过这个指针指向一个数组,这个数组里面存的都是指向函数的指针,仅此而已。
- 指针和指针数组
- 指针数组和数组指针
- 指针数组和数组指针
- 指针数组和数组指针
- 指针数组和数组指针
- 数组指针和指针数组
- 指针数组和数组指针
- 数组指针和指针数组
- 指针数组和数组指针
- 指针数组和数组指针
- 数组指针和指针数组
- 指针数组和数组指针
- 指针数组和数组指针
- 数组指针和指针数组
- 数组指针和指针数组
- 指针数组和数组指针
- 指针数组和数组指针
- 数组指针和指针数组
- Educational Codeforces Round 21E
- hdu 1013 Digital Roots
- openGL ES进阶教程(一)之粒子光束
- Picasso源码完全解析(五)--图片的获取(BitmapHunter)
- C++string类常用函数
- 指针和数组
- 细数WebView那些坑
- 2774 火烧赤壁(排序贪心)
- EPIC付款时供应商公司级别的冻结付款后付款消息为【找不到付款文件】调查
- Python遍历文件夹和读写文件的方法
- Markdown编辑器写博客
- vim--简单设置
- [李景山php] swoole 之 定时器
- 关于PO文本不支持多语言维护问题