c语言中如何自定义数组长度
我想让用户自己来输入需要多少个数,怎样定义数组,来达到这样的效果?因为数组长度不能用未知数,所以不知道该怎么实现。请达人帮忙~~谢谢!...
我想让用户自己来输入需要多少个数,怎样定义数组,来达到这样的效果?
因为数组长度不能用未知数,所以不知道该怎么实现。
请达人帮忙~~ 谢谢! 展开
因为数组长度不能用未知数,所以不知道该怎么实现。
请达人帮忙~~ 谢谢! 展开
8个回答
展开全部
动态分配的数组可以自定义数组的长度,示例如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
printf("输入要分配的内存大小:");
int size;
scanf("%d", &size); //输入自定义的数组长度
int *pstart = (int *)malloc(sizeof(int) *size);
if (pstart==0) {
printf("不能分配内存\n");
return 0;
}
memset(pstart, 0x00, sizeof(int) * size);
int inx;
for (inx=0; inx!=size; ++inx) pstart[inx] = inx;
for (inx=0; inx!=size; ++inx) printf("%d\t", pstart[inx]);
printf("\n");
return 0;
}
展开全部
C99标准支持不定长数组(代价是不能用goto语句)。在输入语句后声明就可以了。
不过现在的编译器对C99的支持都不好```
对于ANSI C(C89)一般的编译器都支持。不过数组长度必须是编译期确定的常量,运行时不能改变。所以采用动态分配实现。
例如
#include<stdio.h>
#include<stdlib.h>/*这个头文件在用malloc和free等分配内存函数时必须被包含*/
int main()
{
int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))
{
printf("Memory is not accessed!\n");
exit(1);/*内存分配失败时异常退出。也需要stdlib.h*/
}
/*如下使用方法实质是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*这里写代码*/
free(a);
/*用完之后需要释放,否则会造成内存泄漏*/
}
return 0;
}
其它还有calloc、realloc等,C++里也可以用new、delete等运算符(如 confuciuskg 所述),具体用法可以直接百度。
不过现在的编译器对C99的支持都不好```
对于ANSI C(C89)一般的编译器都支持。不过数组长度必须是编译期确定的常量,运行时不能改变。所以采用动态分配实现。
例如
#include<stdio.h>
#include<stdlib.h>/*这个头文件在用malloc和free等分配内存函数时必须被包含*/
int main()
{
int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))
{
printf("Memory is not accessed!\n");
exit(1);/*内存分配失败时异常退出。也需要stdlib.h*/
}
/*如下使用方法实质是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*这里写代码*/
free(a);
/*用完之后需要释放,否则会造成内存泄漏*/
}
return 0;
}
其它还有calloc、realloc等,C++里也可以用new、delete等运算符(如 confuciuskg 所述),具体用法可以直接百度。
参考资料: 原创+引用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
采用动态分配即可实现,例如:
#include<iostream>
using namespace std;
void main()
{
int* pArray = NULL; //动态数组
int N; // 动态确定的数组个数
cout << "Please input the number of element in the Array: ";
cin >> N; // 从屏幕中输入数组元素个数
pArray = new int[N]; // 根据N的大小动态分配内存
int i;
for(i = 0; i < N; i++)cin >> pArray[i]; // 从屏幕中依次输入数组元素
cout << "The elements of the Array you inputed is:\n "; // 依次输出这个数组
for(i = 0; i < N; i++)cout << pArray[i] << endl;
delete pArray; // 释放动态分配的内存
}
#include<iostream>
using namespace std;
void main()
{
int* pArray = NULL; //动态数组
int N; // 动态确定的数组个数
cout << "Please input the number of element in the Array: ";
cin >> N; // 从屏幕中输入数组元素个数
pArray = new int[N]; // 根据N的大小动态分配内存
int i;
for(i = 0; i < N; i++)cin >> pArray[i]; // 从屏幕中依次输入数组元素
cout << "The elements of the Array you inputed is:\n "; // 依次输出这个数组
for(i = 0; i < N; i++)cout << pArray[i] << endl;
delete pArray; // 释放动态分配的内存
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。
例如:
#define FD 5
main()
{
int a[3+2],b[7+FD];
……
}
是合法的。
但是下述说明方式是错误的。
main()
{
int n=5;
int a[n];
……
}
但是,数组可以超界使用。
例如:
#define FD 5
main()
{
int a[3+2],b[7+FD];
……
}
是合法的。
但是下述说明方式是错误的。
main()
{
int n=5;
int a[n];
……
}
但是,数组可以超界使用。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p=NULL,n;
printf("Please input the num of elements:\n");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
if(!p)
printf("Memory is not accessed!\n")
else
{
/*
这里你就可以自由使用了,这个我是屡试不爽啊!哈哈 */
}
printf("Please input the num of elements:\n");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
if(!p)
printf("Memory is not accessed!\n")
else
{
/*
这里你就可以自由使用了,这个我是屡试不爽啊!哈哈 */
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询