指针和数组的疑问???

hawkeyes_yq 2003-10-22 12:38:46
如果我这么定义:
char* strSrc = "wang";
char* strDest = "yang";
~~~~~~~~~~~~~
那下面这一步报错:
while ((*strDest++=*strSrc++)!='\0');

如果我这么定义:
char* strSrc = "wang";
char strDest[] = "yang";
~~~~~~~~~~~~~
那下面这一步正确:
while ((*strDest++=*strSrc++)!='\0');

请问,这是怎么回事啊?

...全文
73 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonicsir 2003-12-18
  • 打赏
  • 举报
回复
严重mark!
3dking 2003-11-10
  • 打赏
  • 举报
回复
?
rfuture 2003-11-02
  • 打赏
  • 举报
回复
sc
SolidRabbit 2003-10-22
  • 打赏
  • 举报
回复
Sorry我搞错了
SolidRabbit 2003-10-22
  • 打赏
  • 举报
回复
while ((*strDest++=*strSrc++)!='\0'); 该是
while ((*strDest++ == *strSrc++) != '\0');
fifo333 2003-10-22
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

main()
{
char* strSrc = "wang";
char* strDest = "yang";
int i=0;

while ((*strDest++=*strSrc++)!='\0'); {
printf("%d\n",i++ );
}

system("pause");
return 0;

}
可编译但是运行错误。

char* strSrc = "wang";
char strDest[] = "yang";
int i=0;

while ((*strDest++=*strSrc++)!='\0') { /*wrong type argument to increment*/
printf("%d\n",i++ );
}

不能通过编译,数组类型不能使用++。

char *strSrc = "wang";
char strDest[] = "yang";
int i=0;

while ( (*(strDest+i) = *strSrc++) != '\0' ) {
printf("%d\n",i );
i++;
}

这次可以了。

因为char* strDest = "yang";声明了一个指针但是指向了一个常量,常量不能赋值。
char strDest[] = "yang";是一个数组,可以赋值,但是对于数组名(虽然就是首元素地址)不能使用++操作符,数组名毕竟不是指针。

下面的程序可完成你的意图,且显示了指针和数组名使用的区别:


#include <stdio.h>
#include <stdlib.h>

main()
{
char *strSrc = "wang"; /*指向字符串常量指针,不可赋值*/
char strDest[] = "WANGG"; /*字符数组,可以赋值*/
char *tmp=strSrc;
int i=0;

puts("before handling:");
puts(strSrc);
puts(strDest);
printf("%p\n",strSrc);
puts("");

puts("handling:");
/*字符数组数组名不能使用++,但可以使用指针运算的模式,字符指针可以使用++*/
while ( (*(strDest+i) = *strSrc) != '\0' ) {
printf("%c %c\n",*(strDest+i),*strSrc++ );
i++;
}
puts("");

puts("after handling:");
puts(tmp); /*处理完毕后strSrc已经指向字符串尾部,也就是空字符'\0'*/
puts(strDest);
printf("%p\n",strSrc);

system("pause");
return 0;

}
iidj 2003-10-22
  • 打赏
  • 举报
回复
up TianGuangZao(天光早)
up mmlymlymly(mly)
hawkeyes_yq 2003-10-22
  • 打赏
  • 举报
回复
明白了!谢谢各位!
c4313848 2003-10-22
  • 打赏
  • 举报
回复
用指针定义一个字符串时,系统只开辟一个指针空间大小大概是4个字节,然后指向一个字符串的首地址。用数组定义一个字符串时,系统开辟了数组大小的空间。
hawkeyes_yq 2003-10-22
  • 打赏
  • 举报
回复
To TianGuangZao(天光早) ,mmlymlymly(mly) :我这么定义也有问题,是怎么回事呢?
char* strDest= (char*)malloc(100);
strDest = "yang";
后边还是不让赋值。
pxwzd123 2003-10-22
  • 打赏
  • 举报
回复
为什么我机器上,楼主的两种方法都抱出错
ttlb 2003-10-22
  • 打赏
  • 举报
回复
Up TianGuangZao
darcymei 2003-10-22
  • 打赏
  • 举报
回复
char* strDest = "yang";
strDest指向一段const string的首地址
当然不能对这段string赋值
char strDest[] = "yang";
系统先分配一段空间,赋值"yang",再把首地址赋给strDest,所以能赋值

pxwzd123 2003-10-22
  • 打赏
  • 举报
回复
帮你UP
TianGuangZao 2003-10-22
  • 打赏
  • 举报
回复
"修改它是为定义行为" - > 未定义行为
"最后如下书写" - > 最好如下书写

刚使用 scim 拼音输入法,我打错别字很多。
TianGuangZao 2003-10-22
  • 打赏
  • 举报
回复
char* strDest = "yang";
"yang" 为字符串常量,修改它是为定义行为,指针 strDest 指向该字符串首个字符。

char strDest[] = "yang";
strDest[] 是字符型数组,初始化为 "yang",修改数组包含的元素可以。

综上,如果要修改字符串内容,请选择数组。
对于定义指向字符串常量的指针,最后如下书写:
const char* strDest = "yang";

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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