指针数组和数组指针的区别&指针函数和函数指针的区别
2016-07-29 15:25
531 查看
指针数组和指针函数的本质没有变化,还是数组和函数。而数组指针和函数指针,这是说明这是指针,指向的类型分别是数组和函数。
一、
指针数组:即用于存储指针的数组,也就是数组元素都是指针
char const *keyword[]={"we","we","wexx"};//表示指向不同字符串地址的字符类型的指针数组
int len=sizeof(keyword)/sizeof(keyword[0]);//计算指针数组的大小
printf("%d",sizeof(keyword[0]));//4
printf("最大的数是:%d\n",len);//3
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针(即存储了四个指向整型数据的地址)
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:a是指向(或地址类型)一个一行含有四个元素数组地址的地址变量
元素表示:(*a)[i]
例子说明:在下列函数中,apricot指向的是三列五行的数据表,apricot要访问下一页三列五行,通过的是apricot+1,而不是apricot[1],apricot[1]相当于*(apricot+1),它指向五行的数据组。
int main()
{
int apricot[2][3][5]={{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}},
{{16,17,18,19,20},{21,22,23,24,25},{26,27,28,29,30}}};//两纵三行五列,下面指针所指向的维数不同
int (*r)[3][5]=apricot;//表示指向的是一个两纵数组int类型的首地址
int (*t)[5]=apricot[0];//表示指向的是一个三行数组int类型的首地址
int *s=apricot[0][0];//表示指向一个五列数组int类型的首地址
int u=apricot[0][0][0];//表示数组元素
printf("%x\n",***r);
printf("%x\n",**t);
printf("%x\n",*s);
printf("%x\n",***(r+1));
printf("%x\n",**(t+1));
printf("%x\n",*s+1);
return 0;
}
分别打印出的值是:
1
1
1
10
6
2
二、
指针函数:只是他的返回值 类型 是指针变量
函数指针:是一个 指针变量 ,只不过 它是 指向函数的 指针变量
如函数 int * A(intnum)是一个返回整型类型的指针
而 int (*pf)(intnum)是个函数指针,指向的类型是函数
int * A(int num)
所以有 pf = A,就把 函数A的首地址 赋值给 pf 函数指针了
一、
指针数组:即用于存储指针的数组,也就是数组元素都是指针
char const *keyword[]={"we","we","wexx"};//表示指向不同字符串地址的字符类型的指针数组
int len=sizeof(keyword)/sizeof(keyword[0]);//计算指针数组的大小
printf("%d",sizeof(keyword[0]));//4
printf("最大的数是:%d\n",len);//3
数组指针:a pointer to an array,即指向数组的指针
还要注意的是他们用法的区别,下面举例说明。
int* a[4] 指针数组
表示:数组a中的元素都为int型指针(即存储了四个指向整型数据的地址)
元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*
int (*a)[4] 数组指针
表示:a是指向(或地址类型)一个一行含有四个元素数组地址的地址变量
元素表示:(*a)[i]
例子说明:在下列函数中,apricot指向的是三列五行的数据表,apricot要访问下一页三列五行,通过的是apricot+1,而不是apricot[1],apricot[1]相当于*(apricot+1),它指向五行的数据组。
int main()
{
int apricot[2][3][5]={{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}},
{{16,17,18,19,20},{21,22,23,24,25},{26,27,28,29,30}}};//两纵三行五列,下面指针所指向的维数不同
int (*r)[3][5]=apricot;//表示指向的是一个两纵数组int类型的首地址
int (*t)[5]=apricot[0];//表示指向的是一个三行数组int类型的首地址
int *s=apricot[0][0];//表示指向一个五列数组int类型的首地址
int u=apricot[0][0][0];//表示数组元素
printf("%x\n",***r);
printf("%x\n",**t);
printf("%x\n",*s);
printf("%x\n",***(r+1));
printf("%x\n",**(t+1));
printf("%x\n",*s+1);
return 0;
}
分别打印出的值是:
1
1
1
10
6
2
二、
指针函数:只是他的返回值 类型 是指针变量
函数指针:是一个 指针变量 ,只不过 它是 指向函数的 指针变量
如函数 int * A(intnum)是一个返回整型类型的指针
而 int (*pf)(intnum)是个函数指针,指向的类型是函数
int * A(int num)
所以有 pf = A,就把 函数A的首地址 赋值给 pf 函数指针了
相关文章推荐
- HDU 2612 Find a way (BFS)
- 黑马程序员教你如何写出优秀的前端工程师简历
- 安卓性能优化
- Upgrade to Spring Boot 1.4
- HDU 2222 - Keywords Search(AC自动机模板)
- POJ 1107 W's Cipher
- leetcode 372. Super Pow
- 2016.7.29
- HDU 5768 Lucky7(容斥+同余方程组)
- HttpMessageConverter和@ResponseBody
- poj1011Sticks(dfs+剪枝)
- hdu3746Cyclic Nacklace(kmp中nxt数组应用)
- 键盘消不下去
- HDU 5725/2016多校1C Game
- HDOJ2553 N皇后问题
- 《数学之美》读书笔记(1)
- 自编码器及相关变种算法简介
- 指定openwrt的lan端DNS服务器
- 华为OJ 初级:矩阵乘法
- SQL Server T-SQL高级查询