Question :小白在学习指针的过程中,试图想对*MyArray[]用一级指针去做输入,然而事与愿违,为什么不能用一级指针做输入?代码如下
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void PrintMyArray(char *Arr,int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
printf("%s\n", Arr+i*5);
}
}
int main()
{
char *MyArray[] = { "11111", "22222", "cccccc", "bbbbb", "aaaaa" };
int ArrayLen = sizeof(MyArray) / sizeof(MyArray[0]);
printf("MyArray[0] = %x\n", MyArray[0]);
printf("MyArray[1] = %x\n",MyArray[1]);
printf("MyArray[2] = %x\n", MyArray[2]);
PrintMyArray(MyArray[0],ArrayLen);
system("pause");
return 0;
}
Result:
MyArray[0] = 815860
MyArray[1] = 815868
MyArray[2] = 815870
11111
222
cc
请按任意键继续. . .
其中:MyArray[0] = 0x815860;
MyArray[1] = 0x815868;
MyArray[2] = 0x815870;
Answer:字符串的地址不一定连续!
So:必须要用二级指针做输入
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void PrintMyArray(char **Arr,int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
//printf("%s\n", *(Arr+i)); //注意是等价的
printf("%s\n", Arr[i]);
}
}
int main()
{
char *MyArray[] = { "11111", "22222", "cccccc", "bbbbb", "aaaaa" };
int ArrayLen = sizeof(MyArray) / sizeof(MyArray[0]);
PrintMyArray(&MyArray[0],ArrayLen);
system("pause");
return 0;
}
Result:
11111
22222
cccccc
bbbbb
aaaaa
请按任意键继续. . .
Answer:MyArray数组元素的地址是连续的!
这时我们可以用二级指针做排序了
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void PrintMyArray(char **Arr, int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
//printf("%s\n", *(Arr+i));
printf("%s\n", Arr[i]);
}
}
void SortMyArray(char **Arr, int len)
{
int i = 0, j = 0;
char * temp;
for (i = 0; i < len; i++)
{
for (j = i; j < len; j++)
{
if (strcmp(*(Arr + i), *(Arr + j))>0)
{
temp = *(Arr + i);
*(Arr + i) = *(Arr + j);
*(Arr + j) = temp;
}
}
}
}
int main()
{
char *MyArray[] = { "11111", "22222", "cccccc", "bbbbb", "aaaaa" };
int ArrayLen = sizeof(MyArray) / sizeof(MyArray[0]);
printf("排序前\n");
PrintMyArray(&MyArray[0],ArrayLen);
SortMyArray(&MyArray[0], ArrayLen);
printf("排序后\n");
PrintMyArray(&MyArray[0], ArrayLen);
system("pause");
return 0;
}
Result:
排序前
11111
22222
cccccc
bbbbb
aaaaa
排序后
11111
22222
aaaaa
bbbbb
cccccc
请按任意键继续. . .
扫描二维码关注公众号,回复:
11412964 查看本文章