一、整型二维数组:
二维数组满足数组特点:连续性、单一性、有序性。
本质:一维数组的数组。
int[4] a[3]; 首元素a[0],第一维度。
a[0] [0]; 是内部的一维数组(int [4])的首元素。
a[0] 代表是内部一维数组的数组名;
值—代表是一个地址值int *;
类型— 代表的是 int[4] 这种一种类型。
&a[0][0] 代表地址类型 int *。
&a[0] 代表地址类型int [4] *;a[0] 的类型是int [4];。
int [4] * p; 理解角度应该定义一个这样的指针//c语言不支持这样写
int (*p) [4] = &a[0] = a ;//正确写法。
*(p+i)<=> a[i]; 相当于第i行的数组名,也就是地址。
此时*p就是一个基类型,基类型就是int [4];就相当于内部一维数组的数组名。
访问元素:*(*(p+i)+ 1)第i行第1个元素数据。
p+i: :第i行的地址;控制一整块int [4] *的整体地址。
*(p+i) :第i行的首元素的地址。此时就是一个int[4]的一维数组,相当于一维数组数组名。
p+1地址的类型为int[4] *(基类型为:int[4])
&a[1][0]也址的类型为int * 基类型为int。
二、字符型二维数组
char s[3][10] = {"hello","world","world"};
char(*p)[10];//数组指针—指向的基类型是个数组类型
int* ;//整型指针—指向的基类型是int型
printf("%s\\n",*(p+1));使用时,只需要引用到第一维即可;%s需要访问到的是字符数据;
p+1只是第一行的行地址;*(p+1)才是第一行的首字符的地址——此时才是访问到具体的字符数据
输入:
void inputStr(char (*p)[10],int row)
{
for(int i = 0;i < row;i++)
{
scanf("%s",*(p+i));
}
}
找最大值:
char * maxArray(char (*p)[10],int row)
{
char *max;
max = *p;
for(int i = 0;i < row;i++)
{
if(strcmp(max,*(p+i)) < 0)
{
max = *(p+i);
}
}
return max;
}
输出打印:
void printfArray(char (*p)[10],int row)
{
for(int i = 0;i < 3;i++)
{
printf("%s\\n",*(p+i));
}
}
逆序:
void reverseArray(char (*begin)[10],char (*end)[10])
{
char str[10];
while(begin < end)
{
strcpy(str,*begin);
strcpy(*begin,*end);
strcpy(*end,str);
begin++;
end–;
}
}
排序:
void secert_sort(char (*begin)[10],char (*end)[10])
{
char (*p)[10] = begin;
for(;begin < end;begin++)
{
for(p = begin + 1;p <= end;p++)
{
char str[10];
if(strcmp(*begin,*p) > 0)
{
strcpy(str,*p);
strcpy(*p,*begin);
strcpy(*begin,str);
}
}
}
}
s[0] 类型: //char*
&s[0] 类型: //char**
int a;
a 类型:int
&a 类型: int *
void outputStr(char **p,int len)
{
int i = 0;
for(i = 0;i < len;i++)
{
printf("%s\\n",*(p+i));
}
}
void bubbleSort(char **p,int len)
{
int i = 0;
int j = 0;
for (i = 1; i < len; ++i)
{
for (j = θ; j < len-i; ++j)
{
if (strcmp(*(p+j),*(p+j+1))> θ)
{
char *t = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = t;
}
}
}
}
int main()
{
char* s[] = {"hello","world","english"};
outputStr(s,3);
return 0;
}
二级指针的使用场景
二级指针(char ** p)主要用于需要操作或传递一级指针地址的情况。
二级指针是指向指针的指针,存储的是另一个指针变量的地址。其声明形式为 int **ptr,表示 ptr 是一个指向 int* 类型指针的指针。
char* *p;//二级指针//什么时候需要一个二级指针?//如果要存放的是一级指针变量的地址?
多级指针的概念
多级指针是指针的嵌套,如三级指针 int ***p 指向一个二级指针。每增加一级间接寻址,需通过多次解引用访问最终数据。
char** * &p;
网硕互联帮助中心




![洛谷 P3478:[POI 2008] STA-Station ← 换根DP-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/01/20260120231722-69700d02399e7-220x150.png)

评论前必须登录!
注册