二位数组的创建和初始化,二维数组的使用,二维数组在内存中的存储
int arr[3][4]; //表示3行4列,每个元素都是整形
#include <stdio.h> int main() { //int arr[3][4];//3行4列的整形 //初始化 - 创建的同时给赋值 int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化 int arr2[3][4] = { 1,2,3,4,5,6,7,8 }; //不完全初始化 int arr3[][4] = { {1,2},{3,4},{5,6} }; //可以省略行,但不能省略列 return 0; }
二维数组的使用
// 如何打印出二维数组的值 int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d ", arr1[i][j]); } printf("\n"); } /*结果: 1 2 3 4 5 6 7 8 9 10 11 12*/
二维数组在内存中的存储
二维数组在内存中也是连续存放的,每个数组地址相差为数组类型的地址大小
用途:
// 如何打出二维数组在内存中的地址 int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("arr[%d][%d]%p\n ",i,j, arr1[i][j]); } printf("\n"); } /*结果:
arr[0][0]00000033AA4FF8C8
arr[0][1]00000033AA4FF8CC
arr[0][2]00000033AA4FF8D0
arr[0][3]00000033AA4FF8D4
arr[1][0]00000033AA4FF8D8
arr[1][1]00000033AA4FF8DC
arr[1][2]00000033AA4FF8E0
arr[1][3]00000033AA4FF8E4
arr[2][0]00000033AA4FF8E8
arr[2][1]00000033AA4FF8EC
arr[2][2]00000033AA4FF8F0
arr[2][3]00000033AA4FF8F4
*/
使用指针和数组结合
知识点:
对数组来说,*p是地址并且带值,p是下标,默认等于0,一维数组名就是第一个元素的地址,
对二维数组来说,得加取地址符&,因为地址是连续的,要了解清除数组的布局情况
//使用指针来计算出每个数组的值 int arr2[2][3] = { 1,2,3,4 }; int* p = &arr2[0][0]; //p是第零个地址,一维数组不需要加地址符,二维数组加 for (int i = 0; i < 6; i++) { printf("%d ", *p); p++; //表示地址向前加一 }/*结果:1 2 3 4 0 0 */
如果把二维数组来当成一维数组,例如:arr[3][4]就变成了3个一维数组-->arr[0]、arr[1]、arr[2]
标签:arr,int,二维,++,地址,数组 From: https://www.cnblogs.com/kingxyg/p/16825706.html