首页 > 其他分享 >学C笔记归纳 第十五篇——二维数组

学C笔记归纳 第十五篇——二维数组

时间:2023-12-17 11:34:36浏览次数:28  
标签:arr int 数组名 笔记 二维 数组 printf 第十五 sizeof

 //二维数组创建
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

相关文章

  • Matlab 用sort函数排序 二维数组
    在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可,如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A中项的索引。排序是按升序进行的。 由于在sort函......
  • 阅读笔记《探索需求》3
    最后一本书,也是最后一篇阅读笔记了。   第十章讲的是产生想法的会议,第一点为什么,想法是最重要的,因此对于成功的需求工作者来说,简短的通知后很快就能集中一组人,并且产生一批新的想法是必须的。第二点什么时候,正如我们将要看到的那样,产生想法的会议通常是其他会议的组成部分。......
  • 读程序员的README笔记13_技术设计流程(上)
    1. 行为准则2. 设计过程的螺旋式上升2.1. 圆锥体中的箭头进一步螺旋式上升2.2. 你现在更确定你理解了问题空间2.3. 你的原型为你的解决方案提供了越来越多的信心2.4. 随着每一次迭代,设计文档变得更加清晰和详细3. 技术设计流程3.1. 当被要求对系统进行修改时,大......
  • 《构建之法》读书笔记(二)
      “人们为了解决现实社会和生活中的各种问题,要求助于软件。”那我们如果精准地获取到这些需求呢?通过阅读我了解到以下步骤。   开发一个软件前,我们要去了解这个软件的受益者,了解他们的需求,了解他们对这个软件的期待,然后软件工程师按照相应的需求开发,替用户着想。当然......
  • uniapp生成带有产品和二维码信息的海报
    需求:后端返回产品图片和个人信息,前端根据产品链接生成二维码,然后将产品图片、用户信息、二维码生成海报,并点击下载。这里使用了qrcodejs2、html2canvas、file-saver插件,使用前分别进行安装。点击海报列表在弹层中显示对应的海报产品,并且生成组合的图片供用户下载。<u-......
  • openGauss学习笔记-161 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-161openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出所有数据库-无权限角色导出数据161.1无权限角色导出数据gs_dump和gs_dumpall通过-U指定执行导出的用户帐户。如果当前使用的帐户不具备导出所要求的权限时,会无法导出......
  • 数据结构与算法 第一章(48课时课程笔记)Data Structure and Algorithms
    数据结构基础知识 数据(Data):是对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据元素(DataElement):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项(DataItem)组成。数据......
  • 架构整洁之道笔记1
    随着软件周期的推移,软件修改要付出的代价会越来越大。软件架构的目标是希望以最少的人力满足构建和维护该系统的需求,延缓软件腐化的趋势。关于对架构的误解澄清:高层的架构并不能脱离细节实现的设计。高层架构和低层设计不分你我。从两个价值维度描述软件价值:系统的行为。体现......
  • 金蝶云星空-二次开发笔记
    金蝶云星空-二次开发笔记目录零、资料0.1、公共0.2、报表0.3、插件一、概述1.1、平台介绍1.2、部分业务介绍零、资料0.1、公共知识地图:https://vip.kingdee.com/article/392699482837824512?productLineId=1&isKnowledge=2交流社区:https://vip.kingdee.com/search?productI......
  • MySQL注入1笔记
    Sqlsever常规操作access数据库大于100m可能就会运行缓慢,为了应对中小型企业的使用,微软推出了sqlserver数据库,用来应对一些大型的数据量。sqlserver常用于:教育网站政府网站棋牌网站游戏网站一个企业站一个服务器,有可能是sqlsever一个服务器多个企业站,基本上是access......