二级指针的三种内存模型
第一种内存模型:
/* 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 ////////////////////