单片机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 "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语言程序中,数组最多能有几个元素?为啥我定定义了一个全局的数组,unsigned cha的主要内容,如果未能解决你的问题,请参考以下文章
C语言比较两个数组,从末未开始直至其中一个数组结束,比较两个数组有几个元素是一样的
2022-09-11:arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”, 并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。 我们最多能将数组分成