【C语言提高25】二级指针做输入的第二种内存模型:二维数组

打印  排序:

void main()
{
	int i = 0,j=0;
	int num = 4;
	char tmpbuf[30] = {0};

	char myBuf[30] = {0};
	char myArray[10][30] = { "aaaaaa", "ccccc", "bbbbb", "1111111" };

	//打印
	for (i = 0; i < num; i++)
	{
		printf("%s\n",myArray[i]);
	}

	//排序
	for (i = 0; i < num; i++)
	{
		for (j = i + 1; j < num; j++)
		{
			if (strcmp(myArray[i], myArray[j]) > 0)//前面的大  交换 
			{
				strcpy_s(tmpbuf,myArray[i]); //交换的是内存块   是拷贝
				strcpy_s(myArray[i],myArray[j]);
				strcpy_s(myArray[j],tmpbuf);
			}

		}
	}
	for (i = 0; i < num; i++)
	{
		printf("%s\n", myArray[i]);
	}

	printf("\nhehhe");
	system("pause");
	return;
}

封装成函数:

void printMyArray02(char myArray[10][30],int num)
{
	int i = 0;
	for (i = 0; i < num; i++)
	{
		printf("%s\n", myArray[i]);// printf("%s\n", *(myArray+i));
	}
}

void sortArray02(char myArray[10][30], int num)
{
	int i = 0, j = 0;
	char tmpbuf[30] = { 0 };
	//排序
	for (i = 0; i < num; i++)
	{
		for (j = i + 1; j < num; j++)
		{
			if (strcmp(myArray[i], myArray[j]) > 0)//前面的大  交换 
			{
				strcpy_s(tmpbuf, myArray[i]); //交换的是内存块   是拷贝
				strcpy_s(myArray[i], myArray[j]);
				strcpy_s(myArray[j], tmpbuf);
			}

		}
	}
}
void main()
{
	
	int num = 4;
	
	char myBuf[30] = { 0 };
	char myArray[10][30] = { "aaaaaa", "ccccc", "bbbbb", "1111111" };

	//myArray: 编译器只会关心 有10行  每行30列    所以myArray+1 会直接往跳一行 30个单元  
	//myArray[i]  *(myArray+i)对于二维数组 它们直接加相应的行数    这就是多维数组名的本质  名加1代表增加相应的行数 
	{
		int len1 = sizeof(myArray); //300         这是求出这数据类型的总大小
		int len2 = sizeof(myArray[0]);//30        这样是求每一行的大小
		//int len2 = sizeof(myArray[0][0]);//1    这样才是求每一个元素的大小
		int size = len1 / len2;//10               所以求出的是行数
		printf("size:%d\n", size);
	}

	printMyArray02(myArray, num);
	sortArray02(myArray,num);
	printMyArray02(myArray, num);

	printf("\nhehhe");
	system("pause");
	return;
}

但是调用第一种内存模型的printMyArray01是错误的:

void printMyArray01_err(char**myArray, int num)
{
	int i = 0;
	for (i = 0; i < num; i++)
	{
		printf("%s\n", myArray[i]);
	}
}

问题的本质是:二级指针做输入的第一种内存模型 myArray+1

                            二级指针做输入的第二种内存模型 myArray+1 不一样


也就是指针的步长不一样  也就是说指针所指向内存空间的数据类型不一样

原因在于多维数组名的本质是一个数组类型的指针    并不是二级指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值