c需要定义数组,c定义数组长度可变
C语言数组定义
int n=4;这一句实践定义了n为int型变量,给它赋值4后当然i还是变量,因为i是可以变的量,而数组要求开辟一个指定的空间,所以括号中为了与之对应就不能用变量,只能是常量,比如int a[5];或在程序前已定义了宏#define n=5;
在写成a[n]就可以了,因为这时的n已经代表一个常量了,而不是像int i=4中的i(还是个变量,因为你以后可以改变它的值)
C语言编程中数组的定义
这种题目一般不希望设计内存管理。所以一般都是进可能给一个比较大的数组。
例如
a[10];
表示位数不会超过十,你输入的时候需要个索引记录a[]数组有效的位数。
使用的时候,只使用有效位数。
肯定会有一段内存不用的。或多或少。这就是数组存储动态数据特点。
如果内存管理的话,你设计个增量比如5.
一旦索引告诉你10个位置用完了,地方不够,你在动态申请
15个位置,把原来的复制到新的内存空间。
这就是数组内存管理的方法,但是一般程序不要求这样,因为你要作的是实现算法思想,而不是去想这些内存管理的方面。
所以现在大多不需要程序员考虑内存管理。对实现算法而讲,注重的是实现的思想。
a[10]不行,你就设置你认为足够长的。比如a[100]
通常这种情况,你要考虑你输入的最大数字对应的位数,这种题目肯定是有上限的,不是任何数都可以。
我刚看你的程序了,10进制变16进制程序有误,你没有考虑余数10,11...
10对应A,11对应B..
这样的话,应该用char[]数组存储。
下面是程序
你输入15,会输出F
100,会输出64
#include stdio.h
#include math.h
void main()
{
int num;
printf("请输入一个十进制整数:");
scanf("%d",num);
char a[100]; //这里的数组长度应当依据什么来定义
int i=0;
int yushu;
while(num0)
{
yushu=num%16;
if(yushu10)
a[i]=yushu+'0';
else
a[i]='A'+(yushu-10);
num=num/16;
i++;
}
i--;
printf("转化为十六进制的数为:");
for(;i=0;i--)
{
printf("%c",a[i]);
}
printf("\n");
}
C语言中定义数组
这个一般都是这样处理的
定义一个 字符串数组 char a[20]
那么用memset(a,0,sizeof(a));
将a 数组每个字符都置为 '\0'
注意 '\0'不是空格 而是结束符号'\0'
因为字符串都是以'\0'结束的 这个你搞不懂的话 赶紧回去翻书 这个概念十分重要
如果是其他数组 最好定义一个变量n
比如int a[20] 那么n=10
以后操作数组的时候
for(i=0;in;i++)
那么 实际上操作的就是前10个元素
后面根本不管多少个元素了 也不用初始化他们的值
如果想操作11个元素 只需要把n 改为11即可
问题:为什么不直接把数组定义为int a[n]呢?
是因为c语言 不允许变量做数组声明的长度 这样做是错误的