<C语言>“指针数组与数组指针+指针函数与函数指针”---区别理解
2017-08-15 17:25
531 查看
作者:wsg
时间:2017年8月15日
这四个东西很绕,学习初期让人傻傻分不清楚,实际应用当中也是让人头疼不已,下面,我用最简单的方式来教大家理解。
一、指针数组与数组指针(着重关注后面两个字)
1、指针数组:看后面两字,“数组”,说明它是一个数组,这个数组里面全部元素都是指针。
例:int *a[5]
相当于:
int a[5];
int *p1, *p2, *p3, *p4, *p5;
p1 = a[0];
p2 = a[2];
p3 = a[3];
p4 = a[4];
p5 = a[5];
2、数组指针:看后面两字,“指针”,说明它是一个指针,这个指针指向的地址是一个数组的地址(简要说法:这个指针指向一个数组)。
例:int (*a)[5]
相当于:
int a[5];
int *p = &a;
/**
注意区分&a与a的区别:两者都是表示地址,&a表示整个数组的地址,
a表示数组首元素的地址。
虽然两者的值相同,但是意义却不一样。
而数组指针是一个指向整个数组的指针,所以严格来说这里不能用a来代替&a。
**/
这里()的优先级比[]高,(*a)[5]先看(*a),(*a)是一个指针。
二、指针函数与函数指针
1、指针函数:看后面两字,“函数”,说明它就是一个函数,而返回值是指针。
例:char *func(int a, int b)
相当于(char *)func(int a, int b)
这就不难看出返回值为char *型,也就是char型指针
2、函数指针:同样看后面两字,“指针”,说明它就是一个指针,指向的地址是一个函数的地址。
例:void (*p)(int a, int b)
相当于:
void func(int a, int b)
void *p;
p = func;
大概就是这样,个人觉得还是说得比较浅显了,作者能力有限,若有不足之处,欢迎指正!
时间:2017年8月15日
这四个东西很绕,学习初期让人傻傻分不清楚,实际应用当中也是让人头疼不已,下面,我用最简单的方式来教大家理解。
一、指针数组与数组指针(着重关注后面两个字)
1、指针数组:看后面两字,“数组”,说明它是一个数组,这个数组里面全部元素都是指针。
例:int *a[5]
相当于:
int a[5];
int *p1, *p2, *p3, *p4, *p5;
p1 = a[0];
p2 = a[2];
p3 = a[3];
p4 = a[4];
p5 = a[5];
2、数组指针:看后面两字,“指针”,说明它是一个指针,这个指针指向的地址是一个数组的地址(简要说法:这个指针指向一个数组)。
例:int (*a)[5]
相当于:
int a[5];
int *p = &a;
/**
注意区分&a与a的区别:两者都是表示地址,&a表示整个数组的地址,
a表示数组首元素的地址。
虽然两者的值相同,但是意义却不一样。
而数组指针是一个指向整个数组的指针,所以严格来说这里不能用a来代替&a。
**/
这里()的优先级比[]高,(*a)[5]先看(*a),(*a)是一个指针。
二、指针函数与函数指针
1、指针函数:看后面两字,“函数”,说明它就是一个函数,而返回值是指针。
例:char *func(int a, int b)
相当于(char *)func(int a, int b)
这就不难看出返回值为char *型,也就是char型指针
2、函数指针:同样看后面两字,“指针”,说明它就是一个指针,指向的地址是一个函数的地址。
例:void (*p)(int a, int b)
相当于:
void func(int a, int b)
void *p;
p = func;
大概就是这样,个人觉得还是说得比较浅显了,作者能力有限,若有不足之处,欢迎指正!
相关文章推荐
- <转>c++引用与指针的区别(着重理解)
- <C语言>数组与指针详细知识点(全)
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
- 【C语言】理解指针数组 数组指针 函数指针
- (C语言)数组与指针的区别
- <C基础>数组和指针
- 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
- C语言中,#include <>和#include ""的区别和注意点
- <深入理解C指针>学习笔记和总结 第四章 指针和数组
- 深入理解C语言特性-指针 数组 声明
- C语言:数组和指针的区别
- C语言中数组名和指针的区别
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- 对<jsp:include>和<@ include>的区别和用法的简单理解
- <C/C++>指向指针的指针、指向数组的指针以及存放指针的数组
- 数组<->指针<->动态数组之间的关系
- C语言:数组指针、指针数组、指针的指针、函数指针
- 直观理解C语言中指向一位数组与二维数组的指针
- C语言字符串指针变量与字符数组的区别
- C语言中的指针数组与数组指针的理解