//强化指针数组char* a[30] 和 数组指针char (*a)[30]
//()[]优先级
char *a() //函数名称
{
return NULL;
}
char (*a2)(); //是一个指针变量。。。。。。分配四个自己内存
char **getMem(int count)
{
int i = 0;
char **tmp = (char **)malloc((count+1)*sizeof(char *) );
for (i=0; i<count; i++)
{
tmp[i] = (char *)malloc(100);
}
tmp[count] = NULL;
return tmp;
}
void sortArray(char **myArray)
{
int i = 0, j = 0;
char *tmp;
for (i=0; myArray[i] != NULL; i++)
{
for (j=i+1; myArray[j] != NULL; j++)
{
if (strcmp(myArray[i], myArray[j]))
{
tmp = myArray[i]; //这个地方交换的是指针变量
myArray[i] = myArray[j];
myArray[j] = tmp;
}
}
}
}
void sortArray02(char **myArray)
{
int i = 0, j = 0;
char tmp[200];
for (i=0; myArray[i]!=NULL; i++)
{
for (j=i+1; myArray[j]!=NULL; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)
{
strcpy(tmp, myArray[i]);
strcpy(myArray[i], myArray[j]);
strcpy(myArray[j], tmp); //交换是buf的内容
}
}
}
}
void printfArray(char **myArray)
{
int i = 0, j = 0;
for (i=0; myArray[i] != NULL; i++)
{
printf("%s \n", myArray[i]);
}
}
void main()
{
char **pArray = NULL;
pArray = getMem(3);
strcpy(pArray[0], "bbbbb");
strcpy(pArray[1], "aaaa");
strcpy(pArray[2], "cccc");
printf("排序之前\n");
printfArray(pArray);
//sortArray(pArray, 3);
sortArray02(pArray);
printf("排序之后\n");
printfArray(pArray ,3);
system("pause");
}
由以上程序可知:
一、 由于malloc分配内存实在堆中分配的内存空间 ,可以修改内存区域的内容,因此 对内存区域的内容的交换既可以采用地址的交换,又可以采取内容的交换。
二、二级指针作为函数参数可以改变传入实参的一级指针。