二级指针和多级指针专题

二级指针三种内存模型

二级指针做输入_第1种内存模型

//操作指针数组,通常会用到多级指针
//多级指针的用法与一级指针相同
//*p定义了一个指针变量;p是指针变量,表示内存空间的地址(不是值);*p表示根据这个地址操作值
void main00()
{
	int		i = 0, j = 0;
	int		num = 0;
	char	*tmp = NULL;
	//数组 数组中的每一个元素是指针 指针数组
	char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "111111"};

	//打印
	num = sizeof(myArray)/sizeof(myArray[0]);
	printf("排序之前\n");
	for (i=0; i 0 )
			{
				tmp = myArray[i];  //注意  交换的是数组元素 交换的是指针的值
				myArray[i] = myArray[j];
				myArray[j] = tmp;
			}
		}
	}

	printf("排序之后\n");
	for (i=0; i 0 )
			{   //这不是指针赋值,不满足三个条件,myArray[i]是个值不是地址
                //为什么要用指针变量tmp?因为等号两边数据类型必须相同
				tmp = myArray[i];  //注意  交换的是数组元素 交换的是指针的值 //改变指针的指向
				myArray[i] = myArray[j];
				myArray[j] = tmp;
			}
		}
	}
}

void main01()
{
	int		i = 0, j = 0;
	int		num = 0;
	char	*tmp = NULL;
	//数组 数组中的每一个元素是指针 指针数组
	char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "111111"};

	//打印
	num = sizeof(myArray)/sizeof(myArray[0]);
	printf("排序之前\n");
	printMyArray11(myArray, num);
	sortMyArray11(myArray, num);
	printf("排序之后\n");
	printMyArray11(myArray, num);

	printf("hello...\n");
	system("pause");
	return ;
}

 二级指针的第二种内存模型

//打印  排序 //封装成函数
void main00()
{
	int i = 0, j = 0;
	int num = 4;
	char myBuf[30];
	char tmpBuf[30];
	char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};
	printf("排序之前\n");
	for (i=0; i 0)
			{
				strcpy(tmpBuf, myArray[i]);  //交换的是内存块
				strcpy(myArray[i], myArray[j]);
				strcpy(myArray[j], tmpBuf);
			}
		}
	}
	printf("排序之后\n");
	for (i=0; i 0)
			{
				strcpy(tmpBuf, myArray[i]);  //交换的是内存块
				strcpy(myArray[i], myArray[j]);
				strcpy(myArray[j], tmpBuf);
			}
		}
	}

}

//打印  排序 //封装成函数
void main01()
{
	int i = 0, j = 0;
	int num = 4;
	char myBuf[30];
	char tmpBuf[30];
	char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbb", "1111111111111"};

	//myArray: 编译器只会关心:有10行 ,每行30列。。。。。干什么?myArray+1  多维数组名的本质,
	{
		int len1 = sizeof(myArray);
		int len2 = sizeof(myArray[0]);
		int size = len1/len2;
		printf("len1:%d , len2:%d  size:%d \n", len1, len2, size);

	}
	printf("排序之前\n");
	printMyArray02(myArray, num);
	sortMyArray02(myArray, num);
	printf("排序之后\n");
	printMyArray02(myArray, num);
	printf("hello...\n");
	system("pause");
	return ;
}

二级指针做输入_第3种内存模型

void main00()
{
	int i = 0, j = 0;
	char **p2 = NULL;
	int num = 5;
	char *tmp = NULL;
	char tmpbuf[100];
	p2 = (char **)malloc(sizeof(char *) * num);

	for (i=0; i 0 )
			{
				tmp = myArray[i];  //注意  交换的是数组元素 交换的是指针的值 //改变指针的指向
				myArray[i] = myArray[j];
				myArray[j] = tmp;
			}
		}
	}
}
void getMem41_Free(char **p2, int num)
{
	int i = 0;
	//释放内存
	for(i=0; i

 

你可能感兴趣的:(c/c++)