数组指针和普通指针的关系(除了值相等)
/******************************************************
* 将数组指针转化为普通指针有两种方法:
* 1、将数组指针解引用如(funca,funcb)
* 2、将数组指针强制类型转化为普通指针如(funcc)
* 按照C语言的逻辑,int a = 1; int *p = &a; *p就直接等于a
* 的值了,所以一个*号就可以抵消到一个&,那么数组指针需要的是
* &a(a为数组),即为&&a[0],那么我们想要的是a,就是&a[0]
* 那么对数组指针解引用一次即可。
******************************************************/
#include <stdio.h>
//解引用
void funca(int m, char *(*p)[]);
void funcb(int m, char *(*p)[]);
//强制类型转换
void funcc(int m,char *(*p)[]);
int main()
{
char *p[] = {"a","v","b"};
funca(sizeof(p)/4,&p);
printf("\n");
funcb(sizeof(p)/4,&p);
printf("\n");
funcc(sizeof(p)/4,&p);
return 0;
}
/********************************************
*【1】对数组指针解开引用,就是普通指针
* 用法: (p1是数组指针,p2是普通指针)
* a. char **p2 = *p1; *(p2+i)
* b. (*p1)[i]
*【2】对数组指针强制类型转换
* 用法: char ** p2 = (char **)p1;
********************************************/
//方法a
void funca(int m, char *(*p)[])
{
int i = 0;
char **p2 = *p;
for(i; i < m; i++)
{
printf("%s.\n",*(p2+i));
}
}
//方法b
void funcb(int m, char *(*p)[])
{
int i = 0;
//char **p2 = *p;
for(i; i < m; i++)
{
printf("%s.\n",(*p)[i]);
}
}
//强制类型转换
void funcc(int m, char *(*p)[])
{
int i = 0;
//char **p2 = *p;
char **p2 = (char **)p;
for(i; i < m; i++)
{
printf("%s.\n",(*p)[i]);
}
}