int *a[5];
char *str[5];
指针数组主要用来操作字符串数组,通过将指针数组的每个元素存放字符串的首地址实现对多个字符串的操作
二维数组主要用来存储字符串数组,通过每行存储一个字符串,多行存储多个字符串所组成的数组
具体如下:
#include
int main(void)
{
int a[5] = {1,2,3,4,5};
int (*p)[5] = NULL;
int i = 0;
p = &a;
printf("%p\n",a);
printf("%p\n",p);
for(i = 0;i < 5;i++)
{
printf("%d\n",*(*p + i));
}
return 0;
}
int a[m][n] = {0};
数组指针 第一组第一个元素首地址 a a
指针 第一个元素首地址 a[m] *(a+m)
数据 第一个元素 a[m][n] *(*(a+m)+n)
int a[2][3] = {0};
int *p = NULL;
int (*q)[3] = NULL;
p = &a[0][0];
p = a[0];
p = *a;
q = a;
#include
int main(void)
{
int a[2][3] = {1,2,3,4,5,6};
int *p = NULL;
int (*q)[3] = NULL;
p = *a;
q = a;
printf("==================================\n");
printf("a[1][1]=%d\n",a[1][1]);
printf("==================================\n");
printf("*(a[1]+1)=%d\n",*(a[1]+1));
printf("==================================\n");
printf("*(*(a+1)+1)=%d\n",*(*(a+1)+1));
printf("==================================\n");
printf("*(p+1*3+1)=%d\n",*(p+1*3+1));
printf("==================================\n");
printf("*(*(q+1)+1)=%d\n",*(*(q+1)+1));
printf("==================================\n");
printf("*(q[1]+1)=%d\n",*(q[1]+1));
printf("==================================\n");
printf("q[1][1]=%d\n",q[1][1]);
printf("==================================\n");
return 0;
}
二维数组的数组名是指向数组第一行元素的数组指针
访问二维数组第m行第n的方式:
a[m][n]
*(a[m]+n)
*(*(a+m)+n)
*(p+m*N+n)
*(*(q+m)+n)
*(q[m]+n)
q[m][n]
整形二维数组传参
int a[2][3] = {0};
int Fun(int (*parray)[3], int len);
具体可参考如下程序:
#include
int Inputa(int (*pa)[3],int len)
{
int i = 0;
int j = 0;
for(j = 0;j < len;j++)
{
for(i = 0;i < 3;i++)
{
scanf("%d",&pa[j][i]);
}
}
return 0;
}
int Avera(int (*pa)[3],int len)
{
double sum = 0;
int i = 0;
int j = 0;
for(i = 0;i < len;i++)
{
for(j = 0;j < 3;j++)
{
sum += pa[i][j];
}
}
printf("平均数为:%.2lf\n",sum / (3*len));
return 0;
}
int Outputa(int (*pa)[3],int len)
{
int i = 0;
int j = 0;
for(j = 0;j < len;j++)
{
for(i = 0;i < 3;i++)
{
printf("pa[%d][%d]=%d ",j,i,pa[j][i]);
}
printf("\n");
}
return 0;
}
int main(void)
{
int a[2][3] = {0};
Inputa(a,2);
Avera(a,2);
Outputa(a,2);
return 0;
}
字符型二维数组传参
char str[5][32] = {0};
int Fun(char (*pstr)[32], int len);
具体可参考如下程序:
#include
#include
int Inputa(char (*pa)[32],int len)
{
int j = 0;
for(j = 0;j < len;j++)
{
gets(pa[j]);
}
return 0;
}
int Outputa(char (*pa)[32],int len)
{
int i = 0;
for(i = 0;i < len;i++)
{
puts(pa[i]);
}
return 0;
}
int Sorta(char (*pa)[32],int len)
{
int i = 0;
int j = 0;
char tmp[32] = {0};
for(j = 0;j < len - 1;j++)
{
for(i = 0;i < len - 1 - j;i++)
{
if(strcmp(pa[i],pa[i+1]) > 0)
{
strcpy(tmp,pa[i]);
strcpy(pa[i],pa[i+1]);
strcpy(pa[i+1],tmp);
}
}
}
return 0;
}
int main(void)
{
char a[5][32] = {0};
Inputa(a,5);
Sorta(a,5);
Outputa(a,5);
return 0;
}
int **a = &b;
int *b = &c;
int c = 10;
二级指针 存放一级指针地址
一级指针 存放数据地址
数据 存放数据
int *a[5] = {NULL};
a: int **
具体如下:
#include
int main(void)
{
int num = 10;
int *p = NULL;
int **q = NULL;
q = &p;
p = #
printf("===================\n");
printf("**q = %d\n",**q);
printf("===================\n");
printf("*q = %p\n",*q);
printf("*p = %d\n",*p);
printf("===================\n");
printf("q = %p\n",q);
printf("p = %p\n",p);
printf("num = %d\n",num);
printf("===================\n");
printf("&q = %p\n",&q);
printf("&p = %p\n",&p);
printf("&num = %p\n",&num);
return 0;
}
char *pstr[5] = {"hello", "world", "how", "are", "you"};
int Fun(char **ppstr, int len);
具体可参考如下程序:
#include
int fun1(char **pstr,int len)
{
int i = 0;
for(i = 0;i < len;i++)
{
printf("pstr[i] = %s\n",pstr[i]);
}
return 0;
}
int fun2(char (*pa)[32],int len)
{
int i = 0;
for(i = 0;i < len;i++)
{
printf("pa[i] = %s\n",pa[i]);
}
return 0;
}
int main(void)
{
char *pstr[5] = {"hello","world","how","are","you"};
char a[5][32] = {"hello","world","how","are","you"};
fun1(pstr,5);
printf("========================\n");
fun2(a,5);
return 0;
}
1.现有二维数组 char str[5][32] = {"hello", "world", "how", "are", "you"};
封装函数实现对所有字符串的排序
封装函数实现对所有字符串的打印
2.现有指针数组 char *pstr[5] = {"hello", "world", "how", "are", "you"};
封装函数实现对所有字符串的排序
封装函数实现对所有字符串的打印
1,
#include
#include
int Sortstr(char (*pstr)[32],int len)
{
int i = 0;
int j = 0;
char tmp[32] = {0};
for(j = 0;j < len - 1;j++)
{
for(i = 0;i < len - 1 - j;i++)
{
if(strcmp(pstr[i],pstr[i+1]) > 0)
{
strcpy(tmp,pstr[i]);
strcpy(pstr[i],pstr[i+1]);
strcpy(pstr[i+1],tmp);
}
}
}
return 0;
}
int Putstr(char (*pstr)[32],int len)
{
int i = 0;
for(i = 0;i < len; i++)
{
printf("pstr[%d]=%s\n",i,pstr[i]);
}
return 0;
}
int main(void)
{
char str[5][32] = {"hello","world","how","are","you"};
Sortstr(str,5);
Putstr(str,5);
return 0;
}
2,
#include
#include
int Sortstr(char **pstr,int len)
{
int i = 0;
int j = 0;
char *ptmp = NULL;
for(j = 0;j < len -1;j++)
{
for(i = 0;i < len - 1 - j;i++)
{
if(strcmp(pstr[i],pstr[i+1]) > 0)
{
ptmp = pstr[i];
pstr[i] = pstr[i+1];
pstr[i+1] = ptmp;
}
}
}
return 0;
}
int Putstr(char **pstr,int len)
{
int i = 0;
for(i = 0;i < len;i++)
{
printf("pstr[%d]=%s\n",i,pstr[i]);
}
return 0;
}
int main(void)
{
char *pstr[5] = {"hello","world","how","are","you"};
Sortstr(pstr,5);
Putstr(pstr,5);
return 0;
}