因格式问题,截图上传。
27.double_pointer
/*
* 公司:XXXX
* 作者:Rston
* 博客:http://blog.csdn.net/rston
* GitHub:https://github.com/rston
* 项目:二重指针和二维数组
* 功能:演示二重指针的用法。
*/
#include <stdio.h>
void func(int **p)
{
*p = (int *)0x12345678;
}
int main(int argc, char **argv)
{
// 二重指针指向一重指针的地址
int a = 10;
int *p1 = &a; // 一重指针,指针指向的变量类型为int类型
int **p2 = &p1; // 二重指针,指针指向的变量类型为int *类型
printf("*p1 = %d. **p2 = %d.\n", *p1, **p2); // *p1 = 10. **p2 = 10.
// 二重指针指向指针数组
int c = 12, d = 15;
int *p3 = &c, *p4 = &d;
int *array[2] = {p3, p4}; // 定义指针数组,数组元素为int *类型
int **p5 = array; // 数组名array做右值时表示数组首元素首地址,即int **类型
printf("**p5 = %d. **(p5+1) = %d.\n", **p5, **(p5+1)); // **p5 = 12. **(p5+1) = 15.
// 在某个函数内部通过二重指针传参改变一重指针的指向
int f = 20;
int *p6 = &f;
printf("p6 = %p.\n", p6); // p6 = 0xbfd2f3b8.
func(&p6);
printf("p6 = %p.\n", p6); // p6 = 0x12345678.
return 0;
}
27.darray
/*
* 公司:XXXX
* 作者:Rston
* 博客:http://blog.csdn.net/rston
* GitHub:https://github.com/rston
* 项目:二重指针和二维数组
* 功能:演示二维数组的两种访问方式。
*/
#include <stdio.h>
int main(int argc, char **argv)
{
int a[2][3] = {{1, 2 ,3}, {4, 5, 6}};
int i = 0, j = 0;
// 通过下标访问二维数组
for (i=0; i<2; i++)
{
for (j=0; j<3; j++)
{
printf("a[%d][%d] = %d.\n", i, j, a[i][j]); // a[0][0] = 1. a[0][1] = 2. a[0][2] = 3.
} // a[1][0] = 4. a[1][1] = 5. a[1][2] = 6.
}
// 通过指针方式访问二维数组
int (*p)[3] = a;
for (i=0; i<2; i++)
{
for (j=0; j<3; j++)
{
printf("a[%d][%d] = %d.\n", i, j, *(*(a+i)+j)); // a[0][0] = 1. a[0][1] = 2. a[0][2] = 3.
printf("a[%d][%d] = %d.\n", i, j, *(*(p+i)+j)); // a[1][0] = 4. a[1][1] = 5. a[1][2] = 6.
}
}
return 0;
}
27.darray_pointer
/*
* 公司:XXXX
* 作者:Rston
* 博客:http://blog.csdn.net/rston
* GitHub:https://github.com/rston
* 项目:二重指针和二维数组
* 功能:演示二维数组和指针的纠葛。
*/
#include <stdio.h>
int main(int argc, char **argv)
{
int array[3][2] = {{1, 2}, {3, 4}, {5, 6}};
int i = 0, j = 0;
// 指针指向二维数组的数组名
int (*p1)[2] = array;
for (i=0; i<3; i++)
{
for (j=0; j<2; j++)
{
printf("*(*(p1+%d)+%d) = %d.\n", i, j, *(*(p1+i)+j));
}
}
// 指针指向二维数组的第一维
int *p2 = array[0];
printf("*(p2+1) = %d.\n", *(p2+1)); // *(p2+1) = 2.
// 指针指向二维数组的第二维
int *p3 = &array[0][0];
printf("*(p3+1) = %d.\n", *(p3+1)); // *(p3+1) = 2.
return 0;
}