sizeof(数组名)与sizeof(类型)*(数组大小)的区别

今天在写代码时用到了memset这个函数,发现如果定义一个int型数组

a[1000000],

使用memset进行初始化的时候第一种写法程序死机,第二种就能通过:

(1) memset(a, 0, 1000000*sizeof(int))

(2) memset(a, 0, sizeof(a))

请问这是为什么?这两种写法有什么区别?

2个回答

a[1000000]; //如果是vc,此行就会报错
在栈上申请1000000个整型,需要申请内存4000000字节,合3.81M
vc默认栈大小为1M,所以内存是不够的,申请不到那么多内存,所以在a[1000000];就会报错。
如果是linux,栈大小默认为8M,就可以申请那么多的整型。

对于memset的这两行是没有区别的,两行的效果是一样。

weixin_45688536
[princess] 感谢!
2 天之前 回复

如果是函数里,数组退化成指针,那么就要用sizeof(类型)*(数组大小)
比如
void foo(int a[])
{
cout << sizeof(a); //永远是1,不管传入多少
}

caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复[princess]: a[1000000]这个太大了,可以放在全局变量上
3 天之前 回复
weixin_45688536
[princess] 回复每个人都有一个梦才不会孤单的说话就有天堂: 在这里的值就是相等的呀,但是第一种写法程序死机了,第二种就能通过,它们还有什么区别吗
4 天之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复[princess]: 那要看sizeof(a)和1000000*sizeof(int)是否相等
4 天之前 回复
weixin_45688536
[princess] 那请问问题里的两种写法在运行时间上有差别吗
5 天之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

4
不用SIZEOF求数组大小的问题
2
C语言中数组开辟空间及使用的问题
2
关于字节对齐的问题求大神解答
2
为什么在C语言使用数组时会发生访问冲突?
2
C++如何初始化创建一个新的一维数组B[],完全等同于原有数组A[]?
2
C语言中 数组名何时代表数组首元素地址的指针何时代表整个数组
1
QT:海康千兆网相机,无数据回流
0
有大佬能够通过stdin和stdout来获取终端的大小吗?
1
为什么函数中的L*new报错,后面的p->next=new也不行?
0
tracert程序编译成功运行后,无法正常发送接收包,输出结果只有123456789101112131415161718192021222324252627282930,不显示详细情况,单步运行后发现接收发送包的部分没执行
4
C++超大整数结构体实现乘法,就像要个乘法,网上的看不懂,希望来回答的能多写点注释或者给我讲讲!菜鸟求大佬
1
C语言中关于union的问题
1
用freetype转换字符串成位图数据问题?
1
请大佬指点迷津,请ocx中启动另一个进程作为子窗口,在子窗口中切换中英文输入模式(CTRL + SPACE),不起作用?
1
有没有大神帮我看看哪里出错了?没输完信息,就自动结束的?未完成?
1
为什么 我这代码运行时没输入完就结束?“未完成”????急求!!!!
1
新手求助,一个关于链表中出现的错误。
1
比较学号大小建立双向链表
1
请用C++语言帮忙完善以下程序(单链表的实现)
2
Qt TCP client有些地方不理解