(C语言)对数组指针的内容进行打印And排序

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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_39478139/article/details/102709617