zoukankan      html  css  js  c++  java
  • 二级指针的三种内存模型

    第一种内存模型:

    /*
     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 ////////////////////
    

      

  • 相关阅读:
    Linux启动或禁止SSH用户及IP的登录
    How to Setup Chroot SFTP in Linux (Allow Only SFTP, not SSH)
    vsftp被动模式启用iptables访问设置
    关于使用Element.getNodeValue()返回NULL的问题
    Quartz 有状态的JobDataMap
    log4j学习日记-写入数据库
    LeetCode 551. Student Attendance Record I (学生出勤纪录 I)
    LeetCode 680. Valid Palindrome II (验证回文字符串 Ⅱ)
    LeetCode 125. Valid Palindorme (验证回文字符串)
    LeetCode 541. Reverse String II (反转字符串 II)
  • 原文地址:https://www.cnblogs.com/LandyTan/p/6828182.html
Copyright © 2011-2022 走看看