猫吃鱼427 2021-04-12 22:55 采纳率: 100%
浏览 44
已采纳

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

  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)数组地址  首元素地址的区别

 

  • 写回答

4条回答 默认 最新

  • CSDN专家-cpp_learner 2021-04-13 08:56
    关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀