//二维数组创建 int arr[3][3]; char arr[5][10]; double arr[2][4]; //二维数组初始化 int arr[3][4] = {1,2,3,4,5}; //{1 2 3 4} {5 0 0 0} {0 0 0 0} int arr[3][4] = {{1,2},{4,5}}; //{1 2 0 0} {4 5 0 0} {0 0 0 0} int arr[][4] = {{2,3},{4,5}}; //{2 3 0 0} {4 5 0 0} int arr[][3] ={1,2,3,4,5,6,7,8,9} //{1 2 3} {4,5,6} {7,8,9} //二维数组如果有初始化,行可以省略,列不能省略 //通过列数我们可以确定行数
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int arr[3][4] = { 1,2,3,4,5,6,7,8,9 }; //打印数组每个元素的地址 int i = 0; for (i = 0; i < 3; i++) { int j = 0; for (j = 0; j < 4; j++) { printf("arr[%d][%d] = %d ", i,j,arr[i][j]); printf("&arr[%d][%d] = %p\n", i, j & arr[i][j]); } } return 0; }
调试过程找不到错,重新捋一遍,发现少加了 逗号。
观察这串地址,发现二维数组在内存中也是连续存储的。
arr[ ] [2], 我们可以将它当作一维数组的数组
数组越界:
#include <stdio.h> int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0; for(i=0; i<=10; i++) { printf("%d\n", arr[i]);//当i等于10的时候,越界访问了 } return 0; }
数组越界 编译器是不会报错的,需要我们在写代码时自己注意。
二维数组越界一点还是会正常打印,多了打印也会错,敲代码时注意。
数组传参时,传的是首元素的地址。
#include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5 }; printf("%p\n", arr); printf("%p\n", &arr[0]); printf("%p\n", &arr); printf("%d\n", *arr); printf("%d\n", sizeof(arr)); return 0; }
数组名确实能表示首元素的地址,,二维数组的数组名表示第一行一维数组的地址
但是有两个例外:
1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节
2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址
#include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5 }; printf("%p\n", arr); //arr 就是首元素的地址 printf("%p\n", arr+1); printf("-------------------\n"); printf("%p\n", &arr[0]); //首元素的地址 printf("%p\n", &arr[0]+1); printf("------------------\n"); printf("%p\n", &arr); printf("%p\n", &arr +1); //注意这个加一,跳过了一整个数组的字节 0x28 /*printf("%d\n", *arr); printf("%d\n", sizeof(arr));*/ return 0; }
16进制 0x28 转十进制,32+8 = 40,就是数组arr[10]所占内存,40个字节。
#include <stdio.h> int main() { int arr[3][4]; printf("%p\n", arr); //arr 就是首行一维数组的地址 printf("%p\n", arr+1); return 0; }
0x10 ,16个字节,16=4*4,一行4个元素
#include <stdio.h> int main() { int arr[3][4]; //行数 3 printf("%d\n", sizeof(arr) / sizeof(arr[0])); // 48/16 //列数 4 printf("%d\n", sizeof(arr[0]) / sizeof(arr[0][0])); // 16/4 return 0; }
标签:arr,int,数组名,笔记,二维,数组,printf,第十五,sizeof From: https://www.cnblogs.com/xiaowanglong/p/17905131.html