社区
C++ 语言
帖子详情
这种数组内存是多少?
whati
2007-08-17 09:34:53
比如const char* a[4] = {"44","111","22","44444"};
怎么计算,sizeof a?不对
...全文
1161
34
打赏
收藏
这种数组内存是多少?
比如const char* a[4] = {"44","111","22","44444"}; 怎么计算,sizeof a?不对
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yxlijinzhu
2007-08-22
打赏
举报
回复
指针数组!!!
zhxz1981() :
关键是上面居然有一种理解的结果居然也是16, 真巧, 哈哈哈.
zhxz1981
2007-08-22
打赏
举报
回复
这么个简单的问题居然有那么多结果?
编译跑一遍就得出结果了,纸上谈兵顶个鸟用!!!
jhs1982419
2007-08-20
打赏
举报
回复
晕倒,居然还有人说指针占字节.
食人族哲学家
2007-08-20
打赏
举报
回复
果然是我估计的那样,问题表诉有问题。那我请参考我前面提到的第三条。
试答一下:
5.是什么空间一般程序员好象不需要知道,基本没用。这个应该是编译器预保留给进程的普通变量空间,用&、*都可以操作。
6.内存地址无法预先得知,但不会是对齐的。“连续”也是看其他变量和编译器的,甚至是具体运行空间,基本上不会是连续的,不过基本上4个字符串应该是连的(可以在程序中用&、*取出来自己试),和指针数组不大可能是连的。
7.“定义 char a[N][M] {。。。} 还是 char* a[N]”,看具体情况,如果需要改变字串内容还是前面的好(后面的应该也面前可以,用*、&取出来自己试吧),而且前者操作更方便;后面的对于代码紧凑易读、内存不浪费更好些(前者要有内存浪费,我推荐后者)。
8.xxyyboy(壮志凌云)说“硬件本身对char占用的空间可能不同”,据我所知,没这种可能(char就表示ASC字符,表达起来就是8bit,而基本上现代机都是1字节最小单位,不会表达成字什么的,c语言里用宏来对齐硬件不同造成的麻烦也是基于此)。int一类的变量的确依靠硬件甚至是编译器。
KenYuan2016
2007-08-20
打赏
举报
回复
更正一下
考虑到硬件本身对char占用的空间可能不同,至少目前我遇见的都相同,char是类型中最小的,占1个字节。
4*sizeof(char*) + sizeof(char)*(strlen(a[0])+strlen(a[1])+strlen(a[2])+strlen(a[3]))
linxy2002
2007-08-20
打赏
举报
回复
int len = 0;
for(int i=0; i<4; ++i)
{
len += strlen(a[i]);
}
scholar165
2007-08-20
打赏
举报
回复
应该是16个字节吧.
因为里面的每一个元素都是指针.
linhong34
2007-08-18
打赏
举报
回复
就4个指针大小,数组中存放的是地址
食人族哲学家
2007-08-18
打赏
举报
回复
我不信sizeof(a)的结果会是楼上各位说的,我来试着回答一下:
1.sizeof(a)是char**的大小,因为这是个指向char*的数组,a自然就是char**的了(具体的还有点差别,指针和数组还不是一回事);
2.jxlczjp77() 给的是问题本身的答案,正确,不多说了;
3.有人说再加上4个串的大小,那就不是数组本身的大小了,而是所涉及到全部所占的内存大小了.他们这样回答的意思大概是因为错误理解了问题或者是担心提问的/楼主没有把问题表达清楚,是这个语句一共用了多少内存.
4.回答就是4个串的大小,那我估计就挨不上边了,这没关系啊.
Vitin
2007-08-18
打赏
举报
回复
数组本身的大小是 sizeof(a) = 4*sizeof(const char*) 没错。
LZ可能想知道各元素实际使用的内存和,那么还需加上 strlen(a[0]) + 1 + strlen(a[1]) + 1 + strlen(a[2]) + 1 + strlen(a[3]) + 1
missilery
2007-08-18
打赏
举报
回复
zerglarva_aahha可以给满分!
whati
2007-08-18
打赏
举报
回复
可能是我没表达清楚
我想问的是 这个语句一共用了多少内存. char* 数组,方4个指针,没个指针指向一个字符窜,
那么是不是内存就是 4个指针 + strlen(i)i是4个字符窜?
而且字符串的内存地址是属于常量字符串空间?还是堆的?
这些字符窜内存地址又是怎么安放的,连续的?是按最长一个对齐的?别的?
因为有些代码一个字符窜表 有上万项,而且字符串长短不一。我想了解这些内存的情况!
比如我定义 char a[N][M] {。。。} 还是 char* a[N]好呢?
我所考虑的比你们上面大都数人说的可深入多了。
我想肯定有过来人为这个问题疑惑过。
HelloDan
2007-08-18
打赏
举报
回复
jxlczjp77() 高见啊。
lenreyice
2007-08-18
打赏
举报
回复
sizeof (a) 4个指针,返回是4*sizeof(int)的大小;之后占内存要看的,如果是lz那样的常量的话是直接嵌在代码中的,一般不用去算内存。
zhzhxia
2007-08-18
打赏
举报
回复
jxlczjp77正解
nkinuyasha
2007-08-17
打赏
举报
回复
原来我理解错了 听了jxlczjp77 的一席话 才走出误区
rsp19801226
2007-08-17
打赏
举报
回复
为什么这么简单的问题还老问啊?如楼上所说就是16个字节。
jxlczjp77
2007-08-17
打赏
举报
回复
晕啊!!
不要被初始化时的那一堆字符串迷惑了,a是只不过是一个指针数组,每个内容都是一个指向字符串的指针,每个指针占4个字节,一共是4个指针,不是十六个字节是嘛。那一堆字符串并没有存在数组a中,a村的是他们的地址。
就像你有四个口袋,每个口袋放了你一栋房子的地址(有钱人)一样,你知道这个房子在哪,但是你也不用把房间天天带在身上啊(就是想带也装不下)
我啃
2007-08-17
打赏
举报
回复
搞清楚什么叫数组占用的内存之后再回来问吧~
nkinuyasha
2007-08-17
打赏
举报
回复
就可以直接sizeof(a) 因为二维数组在内存中就是一维数组的存放方式,数据是连续存放
所以结果是16,因为每个字符串结尾还包括一个'\0'字符
在VC6.0下通过
加载更多回复(14)
《C语言基础》 之 第8章
数组
课程内容:
数组
的声明、定义(初始化)、
数组
的赋值、
数组
在
内存
中的空间特点、使用 [ ] 访问
数组
元素、
数组
元素的指针、
数组
第一个元素指针的表示方法、
数组
命令与++、sizeof与
数组
、
数组
名总结、函数普通传参回顾...
Java的
数组
内存
图解析
数组
内存
图 简述: 为什么要单独讲
数组
内存
图呢? 因为学习
内存
图对于Java来说,是理解Java代码运行时的关键,有助于更轻松地理解每一行代码的运行过程。 这一部分内容必须要学会,后面的面向对象需要画很多的
内存
图...
数组
名是不是指针?
引言 指针是C/C++语言的特色,而
数组
名与指针有太多的相似,甚至很多时候,
数组
名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给... 想必
这种
误
c语言char*如何申请
内存
,如何为C中的char
数组
动态分配
内存
?
我正在学习C中的动态
内存
.我学到的作为分配和标准的标准方式例如,为任何数据类型动态解除分配//For double,double* pvalue1 = nullptr;pvalue1 = new double;*pvalue1 = 17.3;delete pvalue1; //free up when I'm ...
java
数组
内存
分配
内存
结构详解
数组
是静态的 Java 语言是典型的静态语言,因此 Java
数组
是静态的,即当
数组
被初始化...所谓初始化,即创建实际的
数组
对象,也就是在
内存
中为
数组
对象分配
内存
空间,并为每个
数组
元素指定初始值。
数组
的初始化...
C++ 语言
64,652
社区成员
250,508
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章