云计算百科
云计算领域专业知识百科平台

day 14 指针+二维数组

一、整型二维数组:

二维数组满足数组特点:连续性、单一性、有序性。

本质:一维数组的数组。

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;

赞(0)
未经允许不得转载:网硕互联帮助中心 » day 14 指针+二维数组
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!