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中,可以通过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() 中变量值未递增