C语言中变量值在存储单元中占用多大空间与啥有关?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中变量值在存储单元中占用多大空间与啥有关?相关的知识,希望对你有一定的参考价值。

参考技术A 与变量类型有关,例如int型的变量占用4个单元
中国物联网校企联盟技术部
参考技术B a
是相当于是*p=*y;*y=*p;
所以值和int
*x指向的值一样;
b
形参的地址虽然发生了交换,但是所指向的值依然是原来的*x和*y;
c
直接是是把*赋值给*x所指向的值被覆盖
d
对的.
感觉不像利用指针只是简单的四则运算交换值

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语言中变量值在存储单元中占用多大空间与啥有关?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的 glutIdleFunc() 中变量值未递增

通过查看windbg中变量值去定位C++软件异常的又一典型案例分享

java在循环语句的执行语句赋予变量值循环结束后会释放吗?

常量和常变量有啥区别没

c语言中字符型数据在内存中的存储形式是?

JavaSe基础回顾