精华内容
下载资源
问答
  • 维数组首地址

    2021-04-10 14:47:56
    dp[0]是二维数组dp[m][n]的首地址; dp是一维数组dp[n]的首地址;

    dp[0]是二维数组dp[m][n]的首地址;
    dp是一维数组dp[n]的首地址;

    展开全文
  • a的值是数组首元素的地址,所以a+1,就是第二个元素的地址。 而&a是整个数组的地址,所以&a+1,就是向后移动(10*4)个单位。所以相差40 一维数组方面较为基础,主要是记忆所以不举例代码 二.二维数组 二维数组...

    这是一个经常会忘却的知识点,最近也一直在吃这方面的亏索性整个复习一遍把这个知识点彻底牢记

    一.一维数组

    若有数组 int a[6];

    a的值是数组首元素的地址,所以a+1,就是第二个元素的地址。

    而&a是整个数组的地址,所以&a+1,就是向后移动(10*4)个单位。所以相差40

    一维数组方面较为基础,主要是记忆所以不举例代码

    二.二维数组

    二维数组方面是需要稍微费心学习下的
    首先是定义方面
    若是有数组 a [ 2 ] [ 3 ]

    a代表第0行的首地址,其步长为一行的长度(这里为12),

    所以a+1代表第1行的首地址,比a大12;a+2代表第2行的首地址,比a大24

    &a[i]代表第i行首地址,等价于a+i

    a代表第0行第0个元素的地址,其步长为一个元素的长度(4),所以 a+1比 a大4(a+1)代表第1行第0个元素的地址,比* a大一行的长度(12)

    a[i]代表第i行首元素地址,等价于*(a+i)

    &a代表整个数组的首地址,其步长为一个数组的大小(24)
    所以&a+1代表该数组最后一个元素的下个位置的地址,比a大24

    (a+i)+j代表第i行第j列元素的地址(a+0)+0代表第0行第0个元素,a + 1代表第0行第1个元素,比(a+0)+0大4
    &a[ i ][ j ]代表第i行第j列元素的地址,等价于*(a+i)+j

    实例具体见下图:

    C/C++ 关于一维或二维数组首地址表示含义

    (此图来源网络)

    实验代码:

    #include<iostream>
    using namespace std;
    int main(){
             int a[2][3] = { 1, 2, 3, 4, 5, '\0' };
             cout << a << endl;
             cout << &a << endl;
             cout << *a << endl;
             return 0;
    }

    输出结果为:

    C/C++ 关于一维或二维数组首地址表示含义
    展开全文
  • 在这里以一维数组举例: char c[5]={}; 1.数值名c是一个地址常量,表示数组首元素的地址 2.&c[0]也表示数组首元素的地址 3.但&c表示的是整个数组的首地址。 这三者的地址值是相同的,但第3与1、2含义却不...
    char c[5]={};
    

    1.数值名c是一个地址常量,表示数组首元素的地址
    2.&c[0]也表示数组首元素的地址
    3.但&c表示的是整个数组的首地址。
    这三者的地址值是相同的,但第3与1、2含义却不一样,1与2不管是地址值还是含义都是一样的。
    下面给出程序验证:
    在这里插入图片描述
    在这里插入图片描述
    可以看到,c+1和&c[0]+1是以一个char型大小为单位增加的,而&c+1是以整个数组大小为单位增加的。

    展开全文
  • C语言总结第七章、数组一维数组一维数组的定义一维数组的引用一维数组的初始化程序举例二维数组及多维数组二维数组的定义二维数组元素的引用二维数组元素的初始化程序举例字符数组和字符串字符数组 第七章、数组 ...

    第七章、数组

    数组是构造数据类型之一

    • 数组: 有序数据的集合,用数组名标识
    • 元素: 属同一数据类型,用数组名和下标确定

    一维数组

    一维数组的定义

    定义方式:
    在这里插入图片描述
    例: int a[6]
    在这里插入图片描述

    一维数组的引用

    1、数组必须先定义,后使用。
    2、只能逐个引用数组元素,不能一次引用整个数组。
    3、数组元素表示形式: 数组名[下标] ,下标可以是常量或整型表达式

    一维数组的初始化

    初始化方式:
    在这里插入图片描述

    说明:
    1、数组不初始化,其元素值为随机数。
    2、对static数组元素不赋初值,系统会自动赋以0值。
    在这里插入图片描述
    3、只给部分数组元素赋初值。
    在这里插入图片描述
    4、当全部数组元素赋初值时,可不指定数组长度。
    在这里插入图片描述

    程序举例

    例1: 读10个整数存入数组,找出其中最大值和最小值
    在这里插入图片描述

    /*示例1*/
    #include <stdio.h>
    #define SIZE 10
    main()
    {   int x[SIZE],i,max,min;
        printf("Enter 10 integers:\n");
        for(i=0;i<SIZE;i++)
        {   printf("%d:",i+1);
    	scanf("%d",&x[i]);
        }
        max=min=x[0];
        for(i=1;i<SIZE;i++)
        {  if(max<x[i])  max=x[i];
           if(min>x[i])  min=x[i];
        }
        printf("Maximum value is %d\n",max);
        printf("Minimum value is %d\n",min);
    }
    

    例2: 用数组求Fibonacci数列前20个数
    在这里插入图片描述

    /*示例2*/
    #include <stdio.h>
    main()
    {   int i;
         int f[20]={1,1};
        for(i=2;i<20;i++)
           f[i]=f[i-2]+f[i-1];
        for(i=0;i<20;i++)
        {   if(i%5==0)  printf("\n");
             printf("%12d",f[i]);
        }
    }
    

    例3: 用冒泡法对10个数排序
    在这里插入图片描述
    在这里插入图片描述

    /*示例3*/
    #include <stdio.h>
    main()
    {   int a[11],i,j,t;
        printf("Input 10 numbers:\n");
        for(i=1;i<11;i++)
           scanf("%d",&a[i]);
        printf("\n");
        for(j=1;j<=9;j++)
           for(i=1;i<=10-j;i++)
              if(a[i]>a[i+1])
             {t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
        printf("The sorted numbers:\n");
        for(i=1;i<11;i++)
    	printf("%d ",a[i]);
    }
    

    例4: 用简单选择法对10个数排序

    在这里插入图片描述

    在这里插入图片描述

     /*示例4*/
    #include <stdio.h>  
    main()
    {   int a[11],i,j,k,x;
        printf("Input 10 numbers:\n");
        for(i=1;i<11;i++)
           scanf("%d",&a[i]);
        printf("\n");
       for(i=1;i<10;i++)
       {  k=i;
          for(j=i+1;j<=10;j++)
                if(a[j]<a[k])  k=j;
          if(i!=k)
          {  x=a[i]; a[i]=a[k]; a[k]=x;}
       }
        printf("The sorted numbers:\n");
        for(i=1;i<11;i++)
    	printf("%d ",a[i]);
    }
    

    二维数组及多维数组

    二维数组的定义

    定义方式: 
    在这里插入图片描述
    在这里插入图片描述
    数组元素的存放顺序
    1、原因: 内存是一维的
    2、二维数组: 按行序优先
    3、多维数组: 最右下标变化最快

    在这里插入图片描述
    数组a[m][n],m行n列,共m*n个元素
    在这里插入图片描述

    这些元素占用m*n个单元,每个单元的大小取决于
    元素的类型。

    任意元素a[i][j]在数组中的位置计算公式为:

    i×n+j (从0开始)

    a——数组的起始地址;a[0]——0行0列元素的地址。

    二维数组元素的引用

    形式: 数组名[下标][下标]

    二维数组元素的初始化

    1、分行初始化
    2、按元素排列顺序初始化

    程序举例

    例1:将二维数组行列元素互换,存到另一个数组中
    在这里插入图片描述

    /*示例1*/
    #include <stdio.h>
    main()
    {   int a[2][3]={{1,2,3},{4,5,6}};
         int b[3][2],i,j;
        printf("array a:\n");
        for(i=0;i<=1;i++)
        {   for(j=0;j<=2;j++)
    	{   printf("%5d",a[i][j]);
    	    b[j][i]=a[i][j];
    	}
    	printf("\n");
        }    
        printf("array b:\n");
        for(i=0;i<=2;i++)
        {   for(j=0;j<=1;j++)
    	   printf("%5d",b[i][j]);
             printf("\n");
        }
    }
    

    例2:求二维数组中最大元素值及其行列号
    在这里插入图片描述

    /*示例2*/
    #include <stdio.h>
    main()
    {  int a[3][4]={{1,2,3,4},
                            {9,8,7,6},
                            {-10,10,-5,2}};
        int i,j,row=0,colum=0,max;
        max=a[0][0];
        for(i=0;i<=2;i++)
           for(j=0;j<=3;j++)
               if(a[i][j]>max)
    	  {  max=a[i][j];
    	     row=i;
    	     colum=j;
    	  }
        printf("max=%d,row=%d,\colum=%d\n",max,row,colum);
    }
    

    例3:分别求n阶方阵两条对角线上的元素之和

    /*示例3*/
    #define N 3
    main()
    {   int i,j,a[N][N];
    int sum1=0,sum2=0;
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        scanf(%d”,&a[i][j]);
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        if(i==j) sum1+=a[i][j];
    for(i=0;i<N;i++)
      for(j=N-1;j>=0;j--)
        if((i+j)==N-1) sum2+=a[i][j];
    printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
    }
    

    字符数组和字符串

    字符数组

    定义 : 每个元素存一个字符,主要用来对字符串操作。
    字符数组的初始化:

    1、逐个字符赋值
    2、用字符串常量

    字符数组的引用:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    字符串

    字符串及其结束标志

    (1)、无字符串变量,用字符数组处理字符串。
    (2)、字符串结束标志:‘\0’。

    在这里插入图片描述
    字符串的输入输出
    输入:

    • 用scanf函数
      (1).输入单个字符:%c 需用循环语句
      (2).输入字符串:%s scanf(“%s”,str);
    • 用gets函数:gets(str);

    输出:

    • 用printf函数
      (1).输出单个字符:%c 需用循环语句
      (2).输出字符串:%s printf(“%s”,str);
    • 用puts函数:puts(str);

    在这里插入图片描述

    常用的字符串处理函数: 加粗样式包含在头文件 string.h

    字符串输出函数puts

    格式: puts(字符数组)
    功能: 向显示器输出字符串(输出完,换行)
    说明: 字符数组必须以‘\0’结束

    字符串输入函数gets

    格式: gets(字符数组)
    功能: 从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
    说明: 输入串长度应小于字符数组维数

    字符串连接函数strcat

    格式: strcat(字符数组1,字符数组2)
    功能: 把字符数组2连到字符数组1后面
    返值: 返回字符数组1的首地址
    说明:
    1、字符数组1必须足够大
    2、连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’

    字符串拷贝函数strcpy

    格式: strcpy(字符数组1,字符串2)
    功能: 将字符串2,拷贝到字符数组1中去
    返值: 返回字符数组1的首地址
    说明:
    1、字符数组1必须足够大
    2、拷贝时‘\0’一同拷贝
    3、不能使用赋值语句为一个字符数组赋值
    在这里插入图片描述

    字符串比较函数strcmp

    格式: strcmp(字符串1,字符串2)
    功能: 比较两个字符串
    比较规则: 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
    返值: 返回int型整数,
    a. 若字符串1< 字符串2, 返回负整数
    b. 若字符串1> 字符串2, 返回正整数
    c. 若字符串1== 字符串2, 返回零
    说明: 字符串比较不能用“==”,必须用strcmp

    字符串比较函数strcmp

    字符串长度函数strlen
    格式:strlen(字符数组)
    功能:计算字符串长度
    返值:返回字符串实际长度,不包括‘\0’在内
    在这里插入图片描述

    展开全文
  • 访问一维数组首地址:a = &a[0]; 访问一维数组的元素:a[i] = *(a+i); 输出一维数组:puts(a); //a为字符串首地址 二维数组访问方式 假设有 a[2][2] 这样一个二维数组,可以这么理解它:a 由 a[0],a[1],...
  • 一维数组 定义一个数组:int a[5]; 此处,a,&amp;a[0]以及&amp;a做右值时在数值上是完全相同的,但含义不同。 数组名a只能做右值,不能做左值。做右值是表示数组首元素首的地址,同&amp;a[0],如: ...
  • 首先大家要记住两个要点:...这个一维数组a他里面有三个元素,数组名表示的是数组的地址,特殊的是数组的地址,和1 这个数组元素的地址是一样的但是意义却不一样。 有什么不一样呢? 对于数组的地址加1的话跳过...
  • 1:一维数组: int a[5]; &a是数组的地址,故&a + 1是加一个数组大小的长度。增加20个字节。 *(&a) = a;对一维数组的地址取值...*(a+i):第i+ 1个一维数组首元素的地址。 *(a+ i)+ j:第i+1个一维数组的第
  • 一维数组与二维数组

    2018-02-13 11:15:46
    &a[0]表示的是这个二维数组一维首地址 &a[0][0]表示的是这个二维数组一维第一个元素的地址。 这三个地址是相同的。 就好像一个班的位置,第一个位置,和第一排的第一个位置,以及第一排一号的位置指的是同...
  • 一维数组: int a[3]; &a是数组的地址,所以&a + 1是相当于增加12个...*(&a) = a:对一维数组地址取值等于数组首元素的地址一维数组名是指针常量,是首元素的地址。 二维数组: int a[5][5]; *(*(a + i) + j)的解析
  • 一维数组 简称数组,形式为a[i],在内存中占用i个大小相等的连续空间,其中数组名a为该空间的首地址,类似于&a[0],数组名不是指针,但可以转化成指针使用。 例如: char a[3];假设数组的首地址为0x0, 则&...
  • 最近对标题所描述的问题很疑惑,经过研究,可以分别求a和a+1的地址,通过地址差即可以...我的结果是,一维数组名代表元素地址,二维数组名代表首行元素地址(一般情况下,首行元素地址等于该行元素地址)。 ...
  • 深入理解一维数组与二维数组

    多人点赞 2021-10-08 10:49:50
    通过一些例子,加深对一维数组和二维数组的理解
  • 一维数组和二维数组

    2018-05-01 01:51:29
    一维数组和二维数组 一维数组:在程序中可以使用下标变量,即说明这些变量的整体为数组,数组的每个变量的数据类型是相同的。...可以看出arr指的是数组首元素arr[0]的地址 数据类型是 int * ...
  • 位数组、二维数组、三维数组

    千次阅读 2019-05-20 22:55:27
    1、一位数组名:指针常量,保存数组首元素地址 &a:一位数组的地址 *(&a)=a; 对一位数组的地址取值等于数组...对二维数组的地址取值等于二维数组的首个一维数组地址 *aa=&aa[0][0]; *(*(aa+i...
  • 维数组首地址和数组名

    千次阅读 多人点赞 2019-05-25 09:15:15
    一维数组中,数组名表示的是数组第一个元素的地址,那么二维数组呢? a表示的是元素a[0][0]的地址?不是! 我们说过,二维数组就是一维数组 二维数组a[3][4]就有三个元素, 所以数组a的第一个元素不是a[0][0],而是...
  • 一维数组及其二维数组的表示

    千次阅读 2018-11-03 12:12:49
    一维数组:是指由相同数据类型的数据 经过 在同一方向 有序排列,一维数组 结构单一,但却是二维数组、多维数组的集合 二维数组:一维数组的叠加,将一维数组看做是一个 “数据”,则将多个数据 依照一位数组 在 另...
  • 一维数组 int a[]={1,3,5} a:数组首行首元素地址,一级指针 &a:整个数组的首地址,二级指针 a+1:跳4个字节 &a+1:跳12个字节 sizeof(a) :取的是整个数组长度12字节 sizeof(a[0]):取的是数组首元素,4字节 ...
  • array:一维数组的地址,同时也是一维数组首元素的地址* array+i :一维数组第i+1个元素的地址 *array:一维数组首元素的值 *(array+1):一维数组第i-1个元素的的值 *array+1:一维数组首元素的值+1; in...
  • 【C语言】一维数组和二维数组

    千次阅读 2017-07-10 09:43:54
    一维数组及二维数组
  • 一维数组的定义和一维数组的引用 内存中一串连续的存储单元(变量),叫数组。指针移动和比较只有在一串连续的数组中才有意义。 当数组中每个变量只带一个下标时,为一维数组。 定义一个一维数组: 类型名 数组...
  • 一维数组与二维数组的共同点和差别4. 深入讨论 `*a` 的问题 1. 一位数组的取值操作与取地址操作 假设现在有一个一位数组 a = [1,2,3,4,5] 因为 a 是一个数组,而在 C 语言中规定,数组变量的名称代表的就是一个...
  • 一维数组与二维数组的区别

    千次阅读 2017-12-17 22:42:20
    arr int* 指向一维数组首元素的地址 arr[0] int 第一个格子的值 arr+1 int* 指向一维数组第二个元素的地址,但是不会覆盖指向首元素的指针 arr[0]+1 int 第一个格子的值加1   int brr[3
  • 其实注意的点就是把一维数组和二维数组当作参数传递。 数组作为函数实参时,只传递数组的地址(首地址),并不传递整个数组的空间。 当用数组名作为实参调用函数,数组首地址指针就被传递到函数中。 一维数组: ...
  • 小结了一维数组和二维数组的创建与初始化、使用、存储、指针访问和几个小点
  • *(&a) = a:对一维数组地址,取值,等于数组首元素的地址数组的地址保存在数组指针里,以下是对数组指针的声明,定义以及赋值int i; int a[5]; int (*p)[5] = NULL; P = &a; //指向整个数组的地址//以下是通过这个...
  • 类比一维数组一维数组的数组名为元素地址,数据类型为指针,到了二位数组,因为也将它看作是一维数组,那么它的数组名就是一个指向由二维数组第一行组成的数组的指针,叫做数组指针。而数组名+n,在一维数组中....
  • 数组概述 数组 构造数据类型之一 数组是具有一定顺序关系...所谓一维数组是指只有一个下标的数组。它在计算机的内存中是连续存储的。 C语言中,一维数组的说明一般形式如下: <存储类型> <数据类型 > &...
  • 二维、三维数组转一维数组

    千次阅读 2015-03-16 09:49:00
    二维数组a[M][N]中,a[i][j] = a[i*N+j],那三维数组a[M][N][P]换算为一维数组的关系公式是什么呢?答:三维数组维展a[M][N][P],下标为a[m][n][p],则一维表达式为a[ (m*N+n)*P+p] 理解:二维转一维时,第一个维度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,023
精华内容 23,209
关键字:

一维数组的首地址