c关于数组所占内存大小问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c关于数组所占内存大小问题相关的知识,希望对你有一定的参考价值。

如果定义数组char a[1000];
在进行输入时cin>>a;
比如只输入了3个元素,再加上'\0',那其他996个字节岂不是浪费了?
有没有办法输入多少个元素占用的内存就是多少?不会造成内存浪费
小弟初学者,有很多地方不懂,谢谢各位了!!!

在C++中可以用string类保存字符串。

在C中,可以通过malloc()和realloc()配合动态分配存储空间,例如:

//---------------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>

char *getline(void) /*读取一个以回车结尾的字符串,保存在动态分配的空间中,并返回这个字符数组的首地址*/

char b,*a=NULL;
int ln=0;
while ((b=getchar())!='\n')

a=(char *)(a?realloc(a,sizeof(char)*(ln+1)):malloc(sizeof(char)));
a[ln++]=b;

if (a)
a=(char *)realloc(a,sizeof(char)*(ln+1));
a[ln]='\0';

return a;

int main(void)

char *str;

printf("%s",str=getline());

free(str); /*由于str指向的空间是动态分配的,所以要用free()函数将其释放*/
return 0;

//---------------------------------------------------------------------------
参考技术A 1.使用动态数组

cin>>n
char *str=new char(n);
然后str就可以使用了 str 的大小由n来决定
使用完后要记得delete

2.其实只要定义为局部变量 其实基本上是不影响程序内存大小的
而且这点数据量完全可以忽略不计~
参考技术B 用来存放字符量的数组称为字符数组。
字符数组类型说明的形式与数值数组相同。例如:
char
c[10];
由于字符型和整型通用,也可以定义为int
c[10]但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如:
char
c[5][10];即为二维字符数组。
字符数组也允许在类型说明时作初始化赋值。例如:
static
char
c[10]=`c`,`
`,`p`,`r`,o`,g`,r`,`a`,`m`;赋值后各元素的值为:
数组c
c[0]c[1]c[2]c[3]c[4]c
[5]c[6]c[7]c[8]c[9]其中c[9]未赋值,由系统自动赋予0值。
当对全体元素赋初值时也可以省去长度说明。例如:
static
char
c[]=`c`,`
`,`p`,`r`,`o`,`g`,`r`,`a`,`m`;这时c数组的长度自动定为9。
用字符串方式赋值比用字符逐个赋值要多占一个字节,
用于存放字符串结束标志'\0'。

C语言中如何计算一个数组占内存多少空间

首地址由数组名表示,也是0元素的地址。
若有: int a[10];
则:a与&a[0]都表示a数组所占存储空间的起始地址
参考技术A int var[] = 0, 1, 2, 3, 4;
计算整个数组的内存空间
sizeof(a);

计算数组元素的个数:
sizeof(a)/sizeof(int);
参考技术B 在可见数组定义时用sizeof运算符:
int a[]=2,3,4j;
int b=sizeof(a);
参考技术C 类型所占空间*数组长度,其中类型所占空间由系统决定,可以使用sizeof函数测出 参考技术D C语言中数组的sizeof值等于数组所占用的内存字节数。
C语言中有一个专门用于检测类型或变量或数组在内存中所占有的空间(字节数)的操作符sizeof,用sizeof可以直接检测出数组在内存占有的字节数。
语法规则是:sizeof(x);
(识别没有歧义时也可写成sizeof
x;)——其中x是类型名、变量名或数组名等,返回x所占字节数(int型)。
扩展资料:
sizeof的使用规则:
1、基本数据类型的sizeof:
这里的基本数据类型指short、int、long、float、double这样的简单内置数据类型,由于它们都是和系统相关的,所以在不同的系统下取值可能不同,这务必引起我们的注意,尽量不要在这方面给自己程序的移植造成麻烦。一般的,在32位编译环境中,sizeof(int)的取值为4。
2、指针变量的sizeof:
指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。
参考资料来源:百度百科-sizeof

以上是关于c关于数组所占内存大小问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言中结构体变量所占内存大小的计算

如何计算Java对象所占内存的大小

C语言中如何计算一个数组占内存多少空间

C语言中如何计算一个数组占内存多少空间

C语言中如何计算一个数组占内存多少空间?

java怎么获取一个对象所占的内存?类似于c的sizeof