关于二维数组的定义和输出,求告知,萌新已经晕了

  1. #include<stdio.h>
    int main()
    { 
        ///定义一个二维数组并输出
    	int nums[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//直接定义实现
    
    	for (int j = 0; j < 3; j++)
    	{
    
    		for (int k = 0; k < 4; k++)
    		  {
    			  printf("%d\t", *(*(nums + j) + k));  //输出*(*(nums + j) + k))
    		  }
    		printf("\n");
    	}
    
    	for (int j = 0; j < 3; j++)
    	{
    
    		for (int k = 0; k < 4; k++)
    		  {
    			  printf("%d\t",nums[j][k]);          //输出nums[j][k]
    		  }
    		printf("\n");
    	}
    
    
    	int(*array)[4]=nums;                           //数组指针实现
    
    	for (int j = 0; j < 3; j++)
    	{
    
    		for (int k = 0; k < 4; k++)
    		  {
    			  printf("%d\t", *(*(array + j) + k));  //输出*(*(array + j) + k))
    		  }
    		printf("\n");
    	}
    
    
    	int nums0[4]= { 1,2,3,4 };
    	int nums1[4]= { 5,6,7,8 };
    	int nums2[4]= { 9,10,11,12 };
    	int *pnums[3] = { nums0,nums1,nums2};          //指针数组实现
    
    	for (int j = 0; j < 3; j++)
    	{
    
    		for (int k = 0; k < 4; k++)
    		  {
    			  printf("%d\t", *(*(pnums + j) + k));//输出 *(*(pnums + j) + k))
    		  }
    		printf("\n");
    	}
    
    	return 0;
    }

代码如上:

(1)int nums[3][4];输出nums[j][k]  ,输出*(*(nums + j) + k))

(2)int(*array)[4] = nums;  输出*(*(array + j) + k))

(个人理解为:数组指针 定义二维数组)

(3)int *pnums[3] = { nums0,nums1,nums2 };   输出 *(*(pnums + j) + k))

(个人理解为:指针数组 定义二维数组)

//该方法书上没有,不知道对不对

-------------------------------------------------------------------------------------------------------------------------------------------------

(1)三种方法输出的二维数组的值 都是相同的,请问 nums, array, pnums三者是否等价?

(2)如有理解错误,求告知,特别方法(2)和方法(3)的区别

(3)数组是一个指向首元素地址的指针吗?

(4)数组地址  首元素地址的区别

 

(1).我个人理解是等价的,因为数组就是指针;

(2).没有理解错误,就是这样使用的。*(nums + j)好比如二位数组第一个中括号的索引,*(*** + k))好比如二位数组第二个中括号的索引,所以*(*(nums + j) + k))等价于nums[j][k];我的理解是他们的是一样的,差别就是二维数组长度是固定的,而指针是可变长的。不管是二维数组还是指针数组还是数组指针,他们本质上都是指针啊,其性质都是一样的;

(3).数组就是一个指向首元素地址的指针;例如int a[10];a就是指针该数组的首地址的指针;

(4).)数组地址,可以理解为整块数组全部地址的集合,也可理解为数组的首地址。首元素地址就是数组的首地址。

不等价,指针和数组的区别很大

这个可以帮助你么: https://blog.csdn.net/q302989778/article/details/80216899  

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632