社区
C语言
帖子详情
memset(&数组的名称, 0, 数组的大小)会怎么样?
z341223318
2011-10-25 10:37:35
[size=16px]
trap_type_enable_t
TrapTypeEnables[MAX_SNMP_TRAP_TYPE];
memset(&TrapTypeEnables,0x0,sizeof(
TrapTypeEnables
));
因为TrapTypeEnables是数组名,已经是地址了,但是memset初始化时,又&TrapTypeEnables进行取地址,
请问初始化的具体是什么,会出现段错误吗?[/size]
...全文
385
11
打赏
收藏
memset(&数组的名称, 0, 数组的大小)会怎么样?
[size=16px]trap_type_enable_t TrapTypeEnables[MAX_SNMP_TRAP_TYPE]; memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables)); 因为TrapTypeEnables是数组名,已经是地址了,但是memset初始化时,又&TrapTypeEnables进行取地址, 请问初始化的具体是什么,会出现段错误吗?[/size]
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
七擒关羽
2011-10-25
打赏
举报
回复
trap_type_enable_t TrapTypeEnables[MAX_SNMP_TRAP_TYPE];
memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables));
因为TrapTypeEnables是数组名,已经是地址了,但是memset初始化时,又&TrapTypeEnables进行取地址,请问初始化的具体是什么,会出现段错误吗?
-------memset的基本用法出现错误
void *memset(void *s, int ch, unsigned n);
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
LZ的用法变成对某地址进行清理
z341223318
2011-10-25
打赏
举报
回复
太深奥了。
赵4老师
2011-10-25
打赏
举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
z341223318
2011-10-25
打赏
举报
回复
关键是我程序刚起来第一次执行memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables))时没问题,
然后自定义一个信号SIG_USER2。当收到SIG_USER2信号再次执行memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables))时,程序退出了,并生成core file文件,用GDB调试,是memset出现了问题?
www_adintr_com
2011-10-25
打赏
举报
回复
和普通变量不同的是,数组名做为右值时表示的并不是地址中的内容,而是地址本身!所以对于数组 array 有一个令人吃惊的性质: array == &array。数组的这个性质可以让你使用 array[i] 来访问数组元素,而不必使用 (&array)[i] 来访问数组元素,虽然后者才是更符合语法的写法。因为 C 语言对下标的解释是按照 addr + i * sizeof(T) 来解释的(根据加法的交换律也可以写成 i * sizeof(T) + addr,所以数组也可以按照 i[array] 形式来访问。在 C 中这除了让你的代码酷一点外没有其他用处,不过在 C++ 中可以借此来区分重载了 operator[] 的自定义类对象和原始指针操作),要进行下标操作的必须是一个地址,所以数组名即使作为右值也当作地址来解释的。这种特殊的方式让 C 语言数组在概念上变得异常复杂,而仅仅是为了访问数组元素的时候能有一个简单的语法。
www_adintr_com
2011-10-25
打赏
举报
回复
[Quote=引用 4 楼 z341223318 的回复:]
trap_type_enable_t TrapTypeEnables[10];
你的意思当TrapTypeEnables定义成数组。
memset时,TrapTypeEnables和&TrapTypeEnables是一样的?
怎么可能?
[/Quote]
事实就是这样,你可以测试下.
这个是 C 语言为了实现数组的语法才这样的.
参考 http://blog.adintr.com/43
<< C 专家编程>>
自信男孩
2011-10-25
打赏
举报
回复
测试了一下,没有出现段错误。只是在编译后会有一个警告:不匹配的隐式声明'memset'函数。
z341223318
2011-10-25
打赏
举报
回复
trap_type_enable_t
TrapTypeEnables[10];
你的意思当TrapTypeEnables定义成数组。
memset时,TrapTypeEnables和&TrapTypeEnables是一样的?
怎么可能?
www_adintr_com
2011-10-25
打赏
举报
回复
对于数组
&array === array
z341223318
2011-10-25
打赏
举报
回复
我就想知道
memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables));
到底初始化了什么?
为什么有时候没有问题,也不报段错误。
孤独小剑
2011-10-25
打赏
举报
回复
这个很可能是段错误,注定不正确的做法,楼主何必执意如此呢。
C++初学者必看学习笔记
C++初学者必看学习笔记
2020傲梦第二届等级测评复习资料(C++四级)
2020傲梦第二届等级测评复习资料(C++四级) 傲梦是一家编程教育机构,虽此教育机构已倒闭,但还可以参考复习资料里的知识点
程序的设计基础一PPT课件.pptx
程序的设计基础一PPT课件.pptx
计算机等级考试三级
全国计算机等级考试三级网络技术上机考试题库100套,大家加油哦!
C语言之精华(要点总结)
总结了很多的关于c语言的精华之所在。对于计算机专业的人更应该去好好的钻研c!了解其精华之所在
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章