#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//不管是几维数组,数组名都表示指向数组首元素地址的指针(数组首元素是什么类型,指针就是什么类型) *******重点**********
void test01()
{
int arr[3][3] = {
{11,22,33},
{44,55,66},
{77,88,99}
};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n----------------------------------------------------\n");
}
}
void test02()
{
//二位数组名表示指向数组首元素的指针 int(*)[3]
int arr[3][3] = {
{ 11, 22, 33 },
{ 44, 55, 66 },
{ 77, 88, 99 }
};
int num1 = (int)arr;
int num2 = (int)(arr + 1);
printf("arr+1 到 arr 步长为%d \n", num2 - num1);//步长12
int num3 = (int)&arr;
int num4 = (int)(&arr + 1);
printf("&arr+1 到 &arr 步长为%d \n", num4 - num3);//步长36
int(*p)[3] = arr;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", (*p)[j]);//此处p是指向一维数组的指针 *p取出数组首地址加上下标取出一维数组内的数据
}
p++;//步长为12个字节
printf("\n");
//数组下标和指针表示方式
printf("%d \n", *(*(arr + 1)+1));//arr[1][1];
printf("%d \n", (*(arr + 1))[1]); //arr[1][1];
}
}
//不管是几维数组,数组名都表示指向数组首元素地址的指针(数组首元素是什么类型,指针就是什么类型)
void fun1(int *arr){}
void fun2(int(*p)[3]){}
void fun3(int arr[3][3]){}
void fun4(int arr[][3]){}
void test03()
{
int my_arr[] = { 1, 2, 3, 4, 5 };
fun1(my_arr);
int arr[3][3] = {
{ 11, 22, 33 },
{ 44, 55, 66 },
{ 77, 88, 99 }
};
fun2(arr);
fun3(arr);
fun4(arr);
}
void fun5(int ***arr)
{
if (arr == NULL)
{
return;
}
int **temp = *arr;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", *(*(temp + i) + j));
temp[i][j] = 100;
}
printf("\n");
}
}
void test04()//二级指针动态分配内存,用三级指针接,并改变数据
{
int **arr = (int **)malloc(sizeof(int *) * 3);
if (arr == NULL)
{
return;
}
memset(arr, 0, sizeof(int *) * 3);
for (int i = 0; i < 3; i++)
{
arr[i] = (int *)malloc(sizeof(int) * 3);
if (arr[i] == NULL)
{
goto End;
}
memset(arr[i], 0, sizeof(int) * 3);
}
int a = 1;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
arr[i][j] = a++;
}
}
fun5(&arr);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
End:
for (int i = 0; i < 3; i++)
{
if (arr[i] != NULL)
{
free(arr[i]);
arr[i] = NULL;
}
}
free(arr);
arr = NULL;
}
void main()
{
//test01();
//test02();
//test03();
test04();
system("pause");
}
二位数组详解以及二维数组的传递
最新推荐文章于 2024-08-21 14:07:30 发布