cc++ 二级指针的三种内存模型

cc++ 二级指针的三种内存模型,第1张

1、第一种 二级指针做输入内存模型 char* pArray[]

代码如下:

​
//打印
void PrintArray(char** parr,int len)
{
	for(int i=0;i0)
			{
				char* pTmp = parr[i];
				parr[i] = parr[j];
				parr[j] = pTmp;
			}
		}
	}
	return;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char* pArray[] = {"222222","1111","33333"};
	//求数组长度
	int len = sizeof(pArray)/sizeof(pArray[0]);
	//打印
	printf("--------排序前--------\n");
	PrintArray(pArray,len);
	SortArray(pArray,len);
	printf("--------排序后--------\n");
	PrintArray(pArray,len);
	system("pause");
	return 0;
}

​

运行结果如下:

 内存模型如下:

 pArray[0]、pArray[1]、pArray[2] 分别存着“222222”、“1111”、“33333”的地址,pArray 代表的是首元素pArray[0]的地址,pArray = & pArray[0],所以函数中可以用char** parr作为形参。


2、第二种 二级指针做输入内存模型 char pArray[ ][ ]

      代码如下:

//打印
void PrintArray(char(*parr)[30],int len)
{
	for(int i=0;i0)
			{
				char pTmp[30];
				strcpy(pTmp,parr[i]);
				strcpy(parr[i],parr[j]);
				strcpy(parr[j],pTmp);
		
			}
		}
	}
	return;
}

int _tmain(int argc, _TCHAR* argv[])
{
	char pArray[][30] = {"222222","1111","33333"};
	//求数组长度
	int len = sizeof(pArray)/sizeof(pArray[0]);
	//打印
	printf("--------排序前--------\n");
	PrintArray(pArray,len);
	SortArray(pArray,len);
	printf("--------排序后--------\n");
	PrintArray(pArray,len);
	system("pause");
	return 0;
}

运行结果如下:

内存模型如下:

pArray 是数组的首元素的地址 相当于&pArray[0], pArray+1 相当于&pArray[1],与char **parry的内部结构不一样步长也不一样所以在传参数的时候不能用char **parry。


1、第三种 二级指针做输入内存模型 char **pArray

 代码如下:

//打印
void PrintArray(char**parr,int len)
{
	for(int i=0;i

运行结果如下:

 内存模型如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)