第一个角度:站在c/c++编译器的角度,对形参,如指针类型,c编译器只会把他大当做一个指针变量来看。(分配四个字节的内存)
第二个角度:我们只有在是用指针所指向的内存空间的时候我们才去关心内存是一维的还是二维的。
这三种内存模型都是指针做输入的情况,在主调函数中分配内存。
C/C++二级指针的三种模型的三种模型之一是
void printfArr(char **arrayPtr, int nLength)
{
int i = 0;
for (; i < nLength; i++)
{
printf("%s\n", arrayPtr[i]);
}
}
void sortArrayStr(char **arrayPtr, int nLength)
{
char *strTmp = NULL;
int i = 0;
int j = 1;
for (; i < nLength; i++)
{
for(j = i + 1; j < nLength; j++)
{
if (strcmp(arrayPtr[i], arrayPtr[j]) > 0)
{
strTmp = arrayPtr[i];
arrayPtr[i] = arrayPtr[j];
arrayPtr[j] =strTmp;
}
}
}
}
int main()
{
<span style="white-space:pre"> </span>// 这里的arrayStr是一个指针数组的数组名,也就是一个指针数组的首地址,他是指针数组,和整形数组类似
<span style="white-space:pre"> </span>// 他和int a[10]中的a一样去考虑
char *arrayStr[] = {"ccccc", "aaaa", "bbbb","11111"};
printf("排序之前\n");
printfArr(arrayStr,4);
sortArrayStr(arrayStr, 4);
printf("排序之后\n");
printfArr(arrayStr,4);
system("pause");
}
C/C++二级指针的三种模型的三种模型之二。
int printfArr22(char **ArrayStr, int iNum)
{
int i = 0;
for (i=0; i<iNum; i++)
{
printf("%s \n", ArrayStr[i]);
}
return 0;
}
int printfArr23(char myArray[10][30], int iNum)
{
int i = 0;
for (i=0; i<iNum; i++)
{
printf("%s \n", myArray[i]);
}
return 0;
}
// int printfArr22(char array[10], int iNum);
int sortArr23(char myArray[10][30], int iNum)
{
int i = 0, j = 0;
char buf[30]; //buf数组名代表数组首元素的地址
//排序
for (i=0; i<4; i++)
{
for (j=i+1; j<4; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)
{
strcpy(buf, myArray[i]);
strcpy(myArray[i],myArray[j]);
strcpy(myArray[j], buf);
}
}
}
}
void main()
{
int i = 0;
char myArray[10][30] = {"ccccc", "aaaa", "bbbb","11111"}; //myArray数组名代表什么?抛砖
<span style="white-space:pre"> </span>// myArray代表的是指向一个char tmp[30]的一个指针,他是一个数组的指针
//打印第二种内存模型
for (i=0; i<4; i++)
{
printf("%s \n", myArray[i]);
}
printf("第二种内存模型,排序之前\n");
printfArr23(myArray, 4);
//printfArr23(myArray[10][30], 4);
sortArr23(myArray, 4);
printf("第二种内存模型,排序之后\n");
printfArr23(myArray, 4);
system("pause");
}
第一种第二种二维数组的指针模型内存图如下图
C/C++二级指针的三种模型的三种模型之三
void printArray(char **myarray)
{
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%s\n", myarray[i]);
}
}
</pre><pre name="code" class="html">//第一种内存模型的排序算法也是用于第三种内存模型
void sortArray(char **myarray, int num)
{
char buf[100];
int i = 0, j = 0;
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (strcmp(myarray[i], myarray[j]) < 0)
{
strcpy(buf, myarray[i]);
strcpy(myarray[i], myarray[j]);
strcpy(myarray[j], buf);
}
}
}
}
int main()
{
int i =0, j = 0;
char **myarray = (char **)malloc(10*sizeof(char*));
for (; i < 10; i++)
{
myarray[i] = (char *)malloc(100*sizeof(char));
if (myarray[i] == NULL)
{
return;
}
sprintf(myarray[i], "%d%d%d", i, i, i);
}
// 第三种内存模型打印
printf("排序前:\n");
printArray(myarray);
sortArray(myarray, 10);
printf("排序后:\n");
printArray(myarray);
for (i = 0; i < 10; i++)
{
free(myarray[i]);
}
if (myarray != NULL)
{
free(myarray);
}
system("pause");
}