第一种内存模型:
/*
Module: 二级指针第一种内存模型.cpp
Notices: Copyright (c) 2017 Landy Tan
*/
#include <iostream>
using namespace std;
/////////////////////////////////////////////////
#define SIZE(a) sizeof(a) / sizeof(a[0])
int SortArray(char **pArray, int nLen);
int OutputArray(char **pArray, int nLen);
/////////////////////////////////////////////////
int main()
{
char* pArray[] = { "333", "111", "444", "222", "666" };
cout << "Before sorting..." << endl;
OutputArray(pArray, SIZE(pArray));
SortArray(pArray, SIZE(pArray));
cout << "After sorting..." << endl;
OutputArray(pArray, SIZE(pArray));
system("pause");
return 0;
}
/////////////////////////////////////////////////
int SortArray(char **pArray, int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
{
for (int j = i; j < nLen; j++)
{
if (strcmp(*(pArray + i), *(pArray + j)) > 0)
{ // Modify the pointer to the point.
char *pTmp = *(pArray + i);
*(pArray + i) = *(pArray + j);
*(pArray + j) = pTmp;
}
}
}
return 0;
}
/////////////////////////////////////////////////
int OutputArray(char **pArray, int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
cout << *(pArray + i) << endl;
return 0;
}
//////////////// End of File ////////////////////
第二种内存模型:
/*
Module: 二级指针第二种内存模型.cpp
Notices: Copyright (c) 2017 Landy Tan
*/
#include <iostream>
using namespace std;
/////////////////////////////////////////////////
#define SIZE(a) sizeof(a) / sizeof(a[0])
int SortArray(char(*pArray)[30], int nLen);
int OutputArray(char(*pArray)[30], int nLen);
/////////////////////////////////////////////////
int main()
{
char pArray[][30] = { "333", "111", "444", "222", "666" };
cout << "Before sorting..." << endl;
OutputArray(pArray, SIZE(pArray));
SortArray(pArray, SIZE(pArray));
cout << "After sorting..." << endl;
OutputArray(pArray, SIZE(pArray));
system("pause");
return 0;
}
/////////////////////////////////////////////////
int SortArray(char(*pArray)[30], int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
{
for (int j = i; j < nLen; j++)
{
if (strcmp(*(pArray + i), *(pArray + j)) > 0)
{ // Modify the data pointed to by the pointer.
char sz[30] = { 0 };
strcpy_s(sz, *(pArray + i));
strcpy_s(*(pArray + i), *(pArray + j));
strcpy_s(*(pArray + j), sz);
}
}
}
return 0;
}
/////////////////////////////////////////////////
int OutputArray(char(*pArray)[30], int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
cout << *(pArray + i) << endl;
return 0;
}
//////////////// End of File ////////////////////
第三种内存模型:
/*
Module: 二级指针第三种内存模型.cpp
Notices: Copyright (c) 2017 Landy Tan
*/
#include <iostream>
using namespace std;
/////////////////////////////////////////////////
int SortArray(char **pArray, int nLen);
int OutputArray(char **pArray, int nLen);
int NewBuffer(char ***pBuf, int nLen1, int nLen2);
void DeleteBuffer(char ***pBuf, int nLen1);
/////////////////////////////////////////////////
int main()
{
char **pBuf;
NewBuffer(&pBuf, 5, 30);
if (pBuf == NULL)
{
cout << "New buffer error." << endl;
system("pause");
return -1;
}
strcpy_s(*(pBuf + 0), 30, "333");
strcpy_s(*(pBuf + 1), 30, "111");
strcpy_s(*(pBuf + 2), 30, "444");
strcpy_s(*(pBuf + 3), 30, "222");
strcpy_s(*(pBuf + 4), 30, "666");
cout << "Before sorting..." << endl;
OutputArray(pBuf, 5);
SortArray(pBuf, 5);
cout << "After sorting..." << endl;
OutputArray(pBuf, 5);
DeleteBuffer(&pBuf, 5);
system("pause");
return 0;
}
/////////////////////////////////////////////////
int SortArray(char **pArray, int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
{
for (int j = i; j < nLen; j++)
{
if (strcmp(*(pArray + i), *(pArray + j)) > 0)
{
}
}
}
return 0;
}
/////////////////////////////////////////////////
int OutputArray(char **pArray, int nLen)
{
if (pArray == NULL || nLen <= 0)
return -1;
for (int i = 0; i < nLen; i++)
cout << *(pArray + i) << endl;
return 0;
}
/////////////////////////////////////////////////
int NewBuffer(char ***pBuf, int nLen1, int nLen2)
{
if (pBuf == NULL || nLen1 <= 0 || nLen2 <= 0)
return -1;
char **p = *pBuf;
p = new char*[nLen1];
for (int i = 0; i < nLen1; ++i)
{
p[i] = new char[nLen2]{ 0 };
}
*pBuf = p;
return 0;
}
/////////////////////////////////////////////////
void DeleteBuffer(char ***pBuf, int nLen1)
{
if (pBuf == NULL)
return ;
char **p = *pBuf;
for (int i = 0; i < nLen1; i++)
{
delete[] p[i];
p[i] = NULL;
}
delete[] p;
p = NULL;
*pBuf = p;
return;
}
//////////////// End of File ////////////////////