您的位置:首页 > 其它

指针数组和数组指针的区别&指针函数和函数指针的区别

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 函数指针了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: