精华内容
下载资源
问答
  • C语言数组引用

    千次阅读 2019-11-23 23:20:08
    数组元素的一般形式为:数组名[下标](下标从0开始) printf("%d\n",arr[5]) 数组名arr通常情况下代表数组元素的首地址 printf("%d\n",arr); //输出为1 数组名arr在两种情况表示整个数组(即不表示元素首地址...

    一维数组的定义方式为: 类型说明符 数组名 [常量表达式]

    int arr[] = {1,2,3,4,5};

    数组元素的一般形式为:数组名[下标](下标从0开始)

    printf("%d\n",arr[5])

    数组名arr通常情况下代表数组元素的首地址

    printf("%d\n",arr);
    //输出为1

    数组名arr在两种情况表示整个数组(即不表示元素首地址)
    1、在定义数组的同一个函数中,求sizeof(arr),整个数组的字节数
    2、在定义数组的同一个函数中,&arr+1,加整个数组

     
    展开全文
  • C语言数组元素的左移、右移

    万次阅读 2018-08-26 15:17:40
    想到数组元素的移动,我最初的想法是这样的。 贴代码: for(i = 0; i < it_Length - it_Steps; i++) { if(it_Direction == -1) { Array[i] = pt_Array[i + it_Steps]; } else { Array[i...

    想到数组元素的移动,我最初的想法是这样的。

    贴代码:

    	for(i = 0; i < it_Length - it_Steps; i++)
    	{
    		if(it_Direction == -1)
    		{
    			Array[i] = pt_Array[i + it_Steps];
    		}
    		else
    		{
    			Array[i + it_Steps] = pt_Array[i];
    		}
    	}
    
    	for(i = 0; i < it_Steps; i++)
    	{
    		if(it_Direction == -1)
    		{
    			Array[it_Length - it_Steps + i] = pt_Array[i];
    
    		}
    		else
    		{
    			Array[i] = pt_Array[it_Length - it_Steps + i];
    		}
    	}

    “-1”表示左移,“1”表示右移(会由用户选择输入)。

    有两个数组,用用户选择的移动长度(it_Steps)作为一个分界点,将原数组pt_Array从[it_Steps]开始的元素赋值给一个新数组Array(第一个for),再将原数组pt_Array从[0]开始到[it_Steps - 1]的元素赋值给Array。

    现在想起来,这个思路确实是过于麻烦,并且只是为了实现功能而设计的。(看不下去)

    之后在前辈的指导下,我又写出了两种。

    一个是速度最快,不考虑内存的情况下。

    一个是占内存最少,速度会有损失的情况下。

    速度最快

    在我知道有memcpy这个函数时,发现之前自己写的简直就是辣鸡。

    函数原型为:void *memcpy(void *dest, const void *src, size_t n)

    引用头文件:#include<string.h>

    功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

    (顺便说一句,大家如果想真正提高自己的编程水平,一定得学会自学,百度,MSDN什么的都利用起来)

    如果还有什么不懂的就查吧,我就直接贴代码了。

    int *Timest(int *pi_Array_in, 
                int i_Length_in, 
                int i_Steps_in, 
                int i_Direction_in, 
                int *piArray)
    {
    	if (i_Direction_in == -1)
    	{
    		memcpy(piArray, 
                   &pi_Array_in[i_Steps_in], 
                   sizeof(int)*(i_Length_in - i_Steps_in));
    
    		memcpy(&piArray[i_Length_in - i_Steps_in], pi_Array_in, sizeof(int)*i_Steps_in);
    	}
    	else
    	{
    		memcpy(&piArray[i_Steps_in], 
                   pi_Array_in, 
                   sizeof(int)*(i_Length_in - i_Steps_in));
    
    		memcpy(piArray, &pi_Array_in[i_Length_in - i_Steps_in], sizeof(int)*i_Steps_in);
    	}
    
    	return piArray;
    }

    还是定义了两个数组,利用memcpy这个函数,左移右移可谓是很容易了。

    内存最少

    这一种算法可能思考起来就没那么容易了,咱们首先来思考一件事。

    要使内存最少,那么也即是只使用一个数组,那么又怎么实现移动呢?

    首先咱们定义一个数组int* p_Array_in(int*是因为需要传参)

    大家可以将整个数组看作为一个环。

    再确定一个初始位置,一般就是数组下标为零的位置了。

    然后,我来帮大家理一下:

    中间变量 = 未来位置的值;

    未来位置的值 = 初始位置的值;

    初始位置的值 =  中间变量 ;

    以上也就是这个算法的核心了。

    有些同学会想了,未来位置的值我怎么知道呢?

    不知道大家有没有听说过约瑟夫环,有兴趣的朋友可以去了解一下,这里的道理跟那个有些相似。

    公式:

    ArrayLength - L, Steps - S, Index - i

    i(下次) = (i(这次) + L -S)%L             (左移)

    i(下次) = (i(这次) + S)%L                  (右移)

    这个时候有些同学又会想了,那万一这个公式整除了怎么办?

    所以这里其实有两种情况:

    整除和不整除

    不整除当然很简单,只需要用到核心算法就可以了,整除是有点儿麻烦,简单点说就是如果下一次的情况会整除就将初始位置的下标加1,然后继续运算。

    我直接贴代码了:

    int *Roomest(int *p_Array_in, int i_Length_in, int i_Steps_in, int i_Direction_in)
    {
    	int iCount = 0;
    
    	int i = 0;
    
    	int iInitial = 0;//最初的
    
    	int iTemp;
    
    	int iSelect;
    
    	if (i_Direction_in == -1) 
    	{
    		iSelect = i_Length_in - i_Steps_in;  //左移
    	}
    	else 
    	{
    		iSelect = i_Steps_in;  //右移
    	}
    
    	while(iCount < i_Length_in)
    	{
    
    		iTemp = p_Array_in[(i + iSelect) % i_Length_in];
    
    		p_Array_in[(i + iSelect) % i_Length_in] = p_Array_in[iInitial];
    
    		p_Array_in[iInitial] = iTemp;
    
    		iCount++;
    
    		i = ((i + iSelect) % i_Length_in);
    
    		if (((i + iSelect) % i_Length_in) == iInitial)   //整除情况处理
    		{
    			iInitial += 1;
    
    			i = iInitial;
    
    			iCount++;
    		}	
    	}
    
    	return p_Array_in;
    }

    还有一个问题就是计数问题了,这是控制循环结束的关键。

    每做一次运算,这里的iCount就要加1,实在不明白的同学不嫌麻烦的话可以手写过程,当初我就是写了两遍才基本上明白了。

    希望以上内容能给大家一些帮助,初次写blog,有哪里写得不好的地方希望大家多多包涵,当然,更希望大家给我指出来,咱们一起进步。

    版权声明:原创文章,欢迎转载,转载请注明作者和链接。 https://blog.csdn.net/qq_42724600/article/details/82079247

    展开全文
  • c语言 输出数组元素

    千次阅读 2020-03-29 12:30:59
    本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。 输入格式: 输入的第一行给出正整数n(1<n≤10)。随后一行给出n个整数,其间以空格分隔。 输出格式: 顺次...

    本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。

    输入格式:
    输入的第一行给出正整数n(1<n≤10)。随后一行给出n个整数,其间以空格分隔。

    输出格式:
    顺次计算后项减前项之差,并按每行三个元素的格式输出结果。数字间空一格,行末不得有多余空格。

    我的答案

    #include<stdio.h>
    int main()
    {
        int n;//整数个数
        scanf("%d", &n);
        int i, temp, flag=0;
        int str[10];//定义数组
        for (i = 0; i < n; i++)//输入数组
        {
            scanf("%d", &str[i]);
        }
        for (i = 1; i < n; i++)
        {
            temp = str[i] - str[i-1];//注意i-1,如果用i+1的话,数据会超出
            flag++;
            if (flag % 3 == 0 || flag == n - 1)//行末没有空格
            {
                printf("%d", temp);
            }
            else//行间有空格
            {
                printf("%d ", temp);
            }
            if (flag % 3 == 0)//每3个换行一次
            {
                printf("\n");
            }
        }
        return 0;
    
    展开全文
  • C语言数组——一维数组实例详解

    千次阅读 多人点赞 2020-01-05 20:25:46
    数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。 一位数组 一位数组是最简单的数组类型,它的定义形式如下: 类型说明符 数组名[常量表达式] 类型说明符是数组中每个元素的类型,常量表达式是数组...

    所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。

    一维数组

    一位数组是最简单的数组类型,它的定义形式如下:
    类型说明符 数组名[常量表达式]
    类型说明符是数组中每个元素的类型,常量表达式是数组元素的个数
    在使用一维数组的时候需要留意以下两个要点

    • 常量表达式的值必须是正整数
    • 数组元素的引用,数组的起始元素下标为0
      下来我们通过一个简单的示例了解一下数组
      代码如下:
    #include<stdio.h>
    #define N 9
    int main(void) {
        int arr[N];
        int i;
        for (i = 0; i < N; i++)
        {
            arr[i] = i + 1;
            printf("arr[%d]=%d\t", i, arr[i]);
            if (0 == (i+1)%3)
            {
                printf("\n");
            }
        }   
        return 0;
    }
    

    运行结果如下:
    在这里插入图片描述
    我们分析一下上面这段代码
    我们定义了一个含有9个元素的一位数组arr,在引用数组中的元素时,采用"数组名[下标]"的方式,将其中的每一个元素视为一个普通的变量来进行操作。需要注意的是,因为定义的数组arr仅含有9个元素,所以在使用的过程中,下标值不能超过8,否则就会出现下标越界的错误,示例如下:
    在这里插入图片描述
    在使用数组的时候要特别注意数组越界,不然很有可能为自己埋下一颗雷(bug)。
    接下来我们我们通过一段代码看一下数组在内存中是如何存放的

    #include<stdio.h>
    #define N 4
    int main(void) {
        int arr[N];
        int i;
        for (i = 0; i < N; i++)
        {
            arr[i] = i;
            printf("&arr[%d]=%d\n", i, &arr[i]);
        }
        return 0;
    }
    

    运行结果如下:
    在这里插入图片描述
    从结果我们可以看出,每个元素占用4个字节,在内用中的存储结构图如下:
    在这里插入图片描述
    最后我们再通过一个示例来巩固一下一维数组
    需求:使用数组保存用户输入的数据,当输入完毕后逆向输出
    代码如下:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #define N 5
    int main(void) {
        int arr[N];//定义数组
        int i, temp;//定义变量
        printf("请输入一个5个元素数组:\n");
        for (i = 0; i < N; i++)
        {
            scanf("%d", &arr[i]);
        }
        printf("读取到的数组如下:\n");
        for (i = 0; i < N; i++)
        {
            printf("%d ",arr[i]);
        }
        printf("\n");
        for (i = 0; i < 2; i++)//将数组中元素的前后位置互换
        {
            temp = arr[i];
            arr[i] = arr[4 - i];
            arr[4 - i] = temp;
        }
        printf("输出的逆向数组如下:\n");
        for (i = 0; i < N; i++)
        {
            printf("%d ", arr[i]);
        }
        return 0;
    }
    

    运行结果如下:
    关于以为一维数组今天就介绍到这,后面继续更新。。。

    如果您觉得本篇文章对您有帮助,请转发给更多的人
    【C语言中文社区】是一个C语言视频教程、学习笔记、电子书、计算机二级资料等专注于C语言编程学习者的干货知识分享平台,精选深度文章,分享优秀干货类、技能类的学习资源,帮助学习中的你。
    在这里插入图片描述

    展开全文
  • C语言求解数组元素逆置的四种方法

    千次阅读 2019-12-23 11:26:30
    1、题目描述 将一个长度为10的整型数组中的值按逆序重新存放。 如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1。 2、方法1 思路:直接倒序输出 #include <stdio.h> int main(){ int a[10...
  • c语言引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。C语言规定只能逐个引用数组元素而不能一次引用整个数组,数据元素的表示形式为“数组名[下标]”,下标可以是整型常量...
  • 2常量表达式中不允许包含变量可以包含常量或符号常量 3数组元素下标可以是任何整型常量整型变量或任何整型表达式 4可以对数组元素赋值数组元素也可以参与运算与简单变量一样使用 5使用数值型数组时不可以一次引用
  • C语言数组之排序

    万次阅读 2019-03-25 19:56:34
    只是另函数接受数组的首地址,通过间接寻址访问主调函数的数组元素,编译器只是检查方括号的数组是否大于0,数组为负数则报错。 同时可以用一个参数传递数组的长度,知道被访问的数组边界在哪,避免缓冲区溢出...
  • /*调用数组元素的三种... printf("用下标引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", a[i]); printf("用数组名引用数组元素:\n"); for (i = 0; i < 5; i++) printf("%d\n", * (a+i))
  • 1.数组指针:即指向数组的指针 ...2.通过指针引用数组元素的基本方法 (1)小标法:a[i]。 (2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p=a,p是指向数组元素的指针变量。 问:为什么*
  • C语言数组下标越界

    千次阅读 2019-07-13 21:53:27
    C语言数组越界的严重性在于对数组元素访问及修改的内容存在不确定性。 这种没有预知性的修改会导致无法确定的错误,发生缓冲区泄露漏洞。 这也就是数组越界的严重所在。 下标越界 代码如下所示: #include <...
  • C语言指针引用数组

    千次阅读 2020-10-16 21:32:54
    前言:C语言中指针玩的是什么,是内存,要想学好指针的小伙伴们要先对数据在内存中是怎么玩的做一番了解~       当在程序中定义一个变量时,系统会根据其数据类型为其开辟内存空间,...
  • c语言数组复制

    2020-12-28 19:12:58
    两种方法可以实现。...该程序功能为遍历数组a,逐个赋值到数组b对应元素中。 2、 借助内存复制函数memcpy,整体赋值。 void *memcpy(void *dst, void *src, size_t size); 这个函数的功能为将src上,大小
  • C语言数组作为函数参数

    万次阅读 多人点赞 2019-02-24 20:24:59
    一:数组元素作为函数的实参 数组元素就是变量,与普通变量没有区别,将数组元素传送给形参,实现单向的值传递。 #include &lt;stdio.h&gt; float max(float x,float y){ if(x &gt; y) return x; ...
  • c语言二维数组元素引用和参数传递

    千次阅读 2012-09-22 22:56:34
    在学习C语言中,多维数组元素应用有许多不同的方式。其中以二维数组最为常见。例如声明数组 int a[3][4]。这个二维数组,如果我想取第2行第3列数据, 可以直接是a[2][3]。除了这一种方式外,我还可以: *(*(a + 2) +...
  • C语言数组知识点梳理

    2020-03-14 21:49:18
    数组元素只能逐个进行引用,不能一次性引用。 数组越界的危害: (1)会覆盖其他变量的值(越界短时) (2)会出现段错误(越界过长) a+i==&a[i] *(a+n)=a[n] 对于一维数组 eg:int a[5] a ——————表示一级地址...
  • 一个指针的含义是“这里有一个元素,它的前后可能还有其它元素”,一个数组名的含义是“这里是一个数组中的第一个元素,它的前面没有数组元素,并且只有通过数组下标才能引用它后面的数组元素”。因此,假如需要使用...
  • 彻底弄懂C语言数组

    千次阅读 2018-06-24 23:08:50
    先定义一个一维数组 int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };1 ...数组名的值是数组元素的指针常量。 数组名不是指针,但大多数使用到数组名的地方,编译器都会把数组名隐式转换...
  • C语言 数组倒序输出数字

    千次阅读 2020-07-23 09:01:12
    引用一维数组元素 对 10 个数组元素依次赋值为 1,2,3,4,5,6,7,8,9 ,10要求按逆序输出 #include<stdio.h> int main() { int i,a[10]; for(i=0; i<10; i++) a[i]=i; for(i=10; i>0; i--) printf("%...
  • C语言数组

    2019-09-09 14:07:18
    数组的特点:构造类型之...3、元素引用数组名【下标】 4、数组名:表示地址的常量,也是数组的起始位置。 5、数组越界:数组越界不检查 求fibonacci数组 数组排序(冒泡、选择) 进制转换 删除法求质数 二维数组...
  • 1).二维数组中&a , a , a[0] , &a[0] , &a[0][0] 2).数组指针与指针数组
  • 一个数组可以分解成多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按照数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 本文主要介绍一维数组、二维数组和...
  • c语言数组

    2018-11-11 17:40:50
    引用时切记第一行第一个数为a[0][0]以此类推 随机生成一个[5][5]的数组,使第一行与第五行调换位置,并找到此行的最大值或最小值 顺便讲一个小知识关于电脑中的随机数 1.计算机不会产生绝对随机的随机数,...
  • c语言数组赋值

    千次阅读 2017-08-29 18:28:21
    最近在学c语言,试着给数组赋值,接下来会逐渐完善
  • C语言:二维数组元素引用

    千次阅读 2017-09-12 17:34:08
    任务代码: (1) #include int main() { int a[3][5],i,j; printf("输入3*5数组:\n"); //输入 for(i=0;i;i++) { for(j=0;j;j++) { scanf("%d",&a[i][j]); }
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、什么是指针? 二、正式介绍 1数组名和数组首元素地址 2.arr和&arr的区别 ​ ...
  • 通过赋初值定义二维数组的大小 第一种: 例如:int a[][3] = {{1, 2, 3}, {4, 5}, {6}, {8}}; 注意: 对于二维数组,省略只能省略第一个方括号中的常量表达式 如上的初赋值语句等同于: int a[4][3] = {{1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,152
精华内容 24,060
关键字:

c语言数组元素的引用

c语言 订阅