社区
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]
...全文
435
11
打赏
收藏
memset(&数组的名称, 0, 数组的大小)会怎么样?
[size=16px]trap_type_enable_t TrapTypeEnables[MAX_SNMP_TRAP_TYPE]; memset(&TrapTypeEnables,0x0,sizeof(TrapTypeEnables)); 因为TrapTypeEnables是数组名,已经是地址了,但是memset初始化时,又&TrapTypeEnables进行取地址, 请问初始化的具体是什么,会出现段错误吗?[/size]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
这个很可能是段错误,注定不正确的做法,楼主何必执意如此呢。
memset
初始化详解
参考文档 Function void *
memset
( void * ptr, int value, size_t num ); Fill block of memory Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted ...
c++
memset
语言_C/C++中的
数组
和
数组
的
memset
函数
1.
数组
介绍1.1 什么是
数组
?
数组
就是把相同数据类型的变量组合在一起而产生的数据集合。从
数组
定义中可以看出
数组
主要有两个方面:相同数据类型的变量;数据集合;对于第一点比较好理解,对于第二点简单来说就是把这些相同数据类型的变量按某种关系联系起来,这也是数据结构的定义。因此
数组
可以说是一个存储数据的数据结构,这种关系是这些相同数据类型的变量在内存中必须是连续存储的。1.2
数组
定义前面说
数组
是相同...
关于C语言中
memset
函数使用(适合小白看)
只是浅显的理解
memset
函数的使用 //
memset
函数的作用就是在替换指定位置的值 //
memset
()函数有三个参数 //第一个参数为
数组
或者字符
数组
的
名称
(其实就是首地址) //第二个参数为0或者-1或者单个字符(注意用单引号) //具体使用看样例 //第三个参数为改变的
数组
大小
(或者称为长度) #include<stdio.h> #include<string.h&...
c语言
memset
清空指向
数组
的指针_C语言中
数组
和指针的关系
数组
的
数组
名其实可以看作一个指针。看下例:1. intarray[10]={0,1,2,3,4,5,6,7,8,9},value;2. value=array[0];//也可写成:value=*array;3. value=array[3];//也可写成:value=*(array+3);4. value=array[4];//也可写成:value=...
c++删除
数组
中重复元素_C/C++中的
数组
和
数组
的
memset
函数
1.
数组
介绍1.1 什么是
数组
?
数组
就是把相同数据类型的变量组合在一起而产生的数据集合。从
数组
定义中可以看出
数组
主要有两个方面:相同数据类型的变量;数据集合;对于第一点比较好理解,对于第二点简单来说就是把这些相同数据类型的变量按某种关系联系起来,这也是数据结构的定义。因此
数组
可以说是一个存储数据的数据结构,这种关系是这些相同数据类型的变量在内存中必须是连续存储的。1.2
数组
定义前面说
数组
是相同...
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章