单片机c语言程序中,数组最多能有几个元素?为啥我定定义了一个全局的数组,unsigned cha

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机c语言程序中,数组最多能有几个元素?为啥我定定义了一个全局的数组,unsigned cha相关的知识,希望对你有一定的参考价值。

单片机c语言程序中,数组最多能有几个元素?为什么我定定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,如果我需要一个512个元素的数组,那该怎么办?我用的单片机是stc15f2k60s2

参考技术A 原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。

但在单片机c语言程序中,实际上还是有限制的,原因在于单片机的存储空间是有限的,数组最多能有几个元素取决于单片机型号。
你定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,说明你还有其他变量占用存储空间。如果需要一个512个元素的数组,用的单片机是stc15f2k60s2,可在定义数组时进行XDATA声明,将数组存储于外部RAM当中。本回答被提问者采纳

C语言比较两个数组,从末未开始直至其中一个数组结束,比较两个数组有几个元素是一样的

#include "stdio.h"
#include "string.h"

int compare_array( int len1, int array1[], int len2, int array2[] )

int i,n=0;
len1=strlen(array1);
len2=strlen(array2);
if(len1>len2)

for(i=len1-1;i>len1-len2-1;i--)
if(array1[i]==array2[i])
n++;


else if(len1<len2)

for(i=len2-1;i>len2-len1-1;i--)
if(array1[i]==array2[i])
n++;

else

for(i=len1-1;i>=0;i--)
if(array1[i]==array2[i])
n++;

return n;



main()

int num,x,y,arr1[]=1,2,3,4,5,arr2[]=2,3,4,5;
num=compare_array(x,arr1,y,arr2);
printf("%d",num);
getch();


这样写错在哪里,得不到正确的结果

#include "stdio.h"
#include "string.h"

int compare_array(int len1, int array1[], int len2, int array2[])

    /*
     * 3元运算符
     * 当数组1的长度>=数组2的长度,循环次数应该数组2的长度,不然会数组下标越界
     * 反之循环次数为数组1的长度
     */
    int loopCnt = len1>=len2 ? len2 : len1;  //循环次数
    int count = 0;  //记录重复个数
    int arrBegin1 = len1 - 1;  //数组1的末尾下标
    int arrBegin2 = len2 - 1;  //数组2的末尾下标
    int i = 0;

    for (i=0; i<loopCnt; i++)
    
        //判断两数组最末尾的值,以后下标递减,直到某数组结束
        if (array1[arrBegin1-i] == array2[arrBegin2-i])
        
            count++;
        
    

    return count;


int main()

    int compare_array(int len1, int array1[], int len2, int array2[]);
    int num = 0;
    int arr1[]=1,2,3,4,5;
    int arr2[]=2,3,4,5;
    int arrLen1 = sizeof(arr1) / sizeof(int);  //取数组1的长度
    int arrLen2 = sizeof(arr2) / sizeof(int);  //取数组2的长度

    num = compare_array(arrLen1, arr1, arrLen2, arr2);
    printf("%d", num);
    getch();

    return 0;

大致应该是这样的。。。

有不明白的,留言。

PS:strlen是取字符串长度的,这里不适用

PS1:int数组当参数时,默认是传递首地址

参考技术A 1、strlen(array1); 传入的是 char* 二你的是int[];

2、你的x,y都没有初始化,所以你直接调用哪个函数肯定不对了
参考技术B 你想啊,如果len1>len2,i=len1-1;array2[i]还会存在吗 。。。数组下标越界了吧追问

这不是字符串啊,唉。。。

追答

if(len1>len2)
for(int i= len1-1;i>len1-len2-1;i--)
if(array1[i]==array2[i-len1+len2])//从最后开始比较,array1比array2长度多len1-len2,所以 // array2从i-(len1-len2)个元素,也就是最后一个开始
n++;






else if(len1len2-len1-1;i--)
if(array1[i-len2+len1]==array2[i])
n++;





参考技术C 字符串匹配吗?

以上是关于单片机c语言程序中,数组最多能有几个元素?为啥我定定义了一个全局的数组,unsigned cha的主要内容,如果未能解决你的问题,请参考以下文章

数组最多能有多少个元素

2245. 转角路径的乘积中最多能有几个尾随零(dp)

C语言比较两个数组,从末未开始直至其中一个数组结束,比较两个数组有几个元素是一样的

2022-09-11:arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”, 并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 我们最多能将数组分成

数据结构与算法之深入解析“最多能完成排序的块II”的求解思路与算法示例

c语言如果用字符串类型输出字符数组,字符数组最后一个是0,那么为啥会出现乱码