存储器问题、指针赋值

aliang4216 2010-02-26 04:26:30
void *memset(void *s,int c,size_t count)
{ char * xs=(char *)s;
while(count--)
* xs++=c;
return s;

}是实现什么样的功能的?
其中char * xs=(char *)s是将s的值还是地址给xs?
* xs++=c中,c是int型的,xs是char型的,也能赋值?如果能,是将xs+1后给c赋值,还是xs=xs+1?
谢谢解答!!
...全文
138 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzl32 2010-02-27
  • 打赏
  • 举报
回复

//将s指向的内存内容初始化为c
void *memset(void *s,int c,size_t count)
{
char * xs=(char *)s;
while(count--)
*xs++=c;

return s;
}
starcat 2010-02-27
  • 打赏
  • 举报
回复
原来memset()是这样实现的
这个帖子应该移到纯C区,呵呵
malu_1982 2010-02-27
  • 打赏
  • 举报
回复
这个函数还是很经典的。

char * xs=(char *)s 这句话有没有都可以。后面用 s 就行了
aliang4216 2010-02-27
  • 打赏
  • 举报
回复
谢谢各位的回复
char * xs=(char *)s
如果这是赋地址的,那char xs=s不是附地址的吗,一样?
大家回答的都很仔细,都不值得把分给谁了,呵呵
「已注销」 2010-02-27
  • 打赏
  • 举报
回复
void __memset(void *addr_d,unsigned long addr_s,int len_n)
{
for(int i=0;i<len_n;i++)
*((char*)addr_d+i)=(char)addr_s,addr_s>>=8;
}
macrossdzh 2010-02-26
  • 打赏
  • 举报
回复
函数的功能是:把s所指向内存的前count个字节赋值为c
waterx 2010-02-26
  • 打赏
  • 举报
回复
* xs++=c;
相当于
* xs++=(char)c;
xs指向的内容被赋值为(char)c后,xs指针加1
joey_zoy 2010-02-26
  • 打赏
  • 举报
回复 1
char * xs=(char *)s 这个是指针赋值,表示xs,s指向同一对象,目的是保留xs当前指向的对象,因为xs指向的对象会变
* xs++=c其实就是*xs = c; xs++; 意思是把xs 指向的对象赋值为c,再把xs+1
所以while(count --)* xs++=c;这个循环完成了所有赋值
yshuise 2010-02-26
  • 打赏
  • 举报
回复
把s这个缓冲区全部赋值为c
stardust20 2010-02-26
  • 打赏
  • 举报
回复
char * xs=(char *)s是将s的值还是地址给xs?
让xs和s指向相同的地方
c是int型的,xs是char型的,也能赋值?
可以但将int赋给char有可能溢出
* xs++=c;
先赋值再加
zbing0203 2010-02-26
  • 打赏
  • 举报
回复
* xs++=c;
先赋值 再xs加1
昵称很不好取 2010-02-26
  • 打赏
  • 举报
回复
char其实也是一种int,这函数实现memset功能,按字节赋值s所指空间
罗耗子 2010-02-26
  • 打赏
  • 举报
回复
地址,将要往里面填初始化字符

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧