1.字符指针:也就是存放字符地址的指针(和整型指针差不多)
代码如下:
int main()
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}
2.数组指针:也就是指向数组的指针
2.1数组指针如何初始化
int main()
{
int arr[10] = { 0 };
int(*p)[10] = &arr;//必须要有括号,这才能保证p为指针,理解起来就是p指向的是一个大小为10的整型数组
return 0;
}
ps:一定要注意以上代码后面的注释内容;
2.2二维数组传参的本质
首先我们先来复习一下之前是如何打印二维数组中各个元素的值的。
代码如下
void test(int arr[3][5], int x, int y)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6} };
test(arr, 3, 5);
return 0;
}
解析:
1.这里的实参是一个二维数组,形参也写成了二维数组的形式,首先我们再来复习一个二维数组的格式,二维数组可以看成一维数组中的元素,所以二维数组的每个元素都是一维数组。
2.所以根据上述一维数组的数组名为首元素的地址,那么二维数组的数组名也就是第一行数组的地址。根据这个猜想,那我们可以使用数组指针的形式来打印二维数组中的各个内容吗?
代码如下:
void test(int(*p)[5], int x, int y)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
printf("%d ", *(*(p + i))+j);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6} };
test(arr, 3, 5);
return 0;
}