小甲鱼 P26 指向指针的指针
指向指针的指针
pp存放着p的地址
num的地址存放在p里面
pp的一层解引用得到p的值,也就是num的地址
#include <stdio.h>
int main()
{
int num = 520;
int *p = #
int **pp = &p;
printf("num: %d\n", num);
printf("*p: %d\n", *p);
printf("**p: %d\n", **pp);
printf("&p: %p, pp: %p\n", &p, pp);
printf("&num: %p, p: %p, *pp: %p\n", &num, p, *pp);
return 0;
}
结果:
指针数组和指向指针的指针
#include <stdio.h>
int main()
{
char *cBooks[] = { //指针数组
"hello",
"world",
"!",
"000",
"111",
"222",//字符串,指向字符的指针
};
char **byFishC;//定义指向字符指针的指针的变量
char **jiayuLoves[4];//定义指向字符指针的指针的数组
int i;
byFishC = &cBooks[5];//指针数组第五个的第一个元素地址
jiayuLoves[0] = &cBooks[0];
jiayuLoves[1] = &cBooks[1];
jiayuLoves[2] = &cBooks[2];
jiayuLoves[3] = &cBooks[3];
printf("FishC出版的图书有:%s", *byFishC);
printf("小甲鱼喜欢的图书有:\n");
for (i = 0; i < 4; i++)
{
printf("%s\n", *jiayuLoves[i]);
}
return 0;
}
数组指针和二维数组
#include <stdio.h>
int main()
{
int array[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}};
//跨度
//数组指针指向的是整一行,跨度是每一行
//指针数组指向的是每一行的第一个元素,跨度是每个元素
int (*p)[4] = array;//p指向的是4个元素的一维数组
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%2d ", *(*(p + i)+j));//p+i:第几行,j第几列
}
printf("\n");
}
}
下面是另一种写法:
#include <stdio.h>
int main()
{
int array[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}};
//跨度
//数组指针指向的是整一行,跨度是每一行
//指针数组指向的是每一行的第一个元素,跨度是每个元素
int (*p)[3][4] = &array;//p指向的是4个元素的一维数组
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%2d ", *(*(*p + i)+j));//p+i:第几行,j第几列
}
printf("\n");
}
}