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