以下是引用蓝天c语言在2010-9-8 18:09:41的发言:
#include
#include
main()
{
char *str1="you are a boy";
char a[13];
int *p;
strcpy(p=a+1,str1);
printf("%s",str1);
}
这样运行程序正确,为什么不能把strcpy(p=a+1,str1);改为strcpy(p=++a,str1)或者strcpy(++a,str1)?
知道的详细说明一下理由,谢谢啦!
这么短的代码,问题还真不少, int *p;strcpy(p=a+1,str1);这两句话写的很不好。
我给出一般的C库strcpy函数的原型: char * strcpy( char * ,const char * );它的第一个参数可是char *的类型的哦,而您的却是int *,一般编译器会有警告的。
最好改成char *p=a+1;strcpy(p,str1); 或者char *p=strcpy(a+1,str1);
改为strcpy(p=++a,str1)或者strcpy(++a,str1),为什么不行呢?
这里面的a您可是申明的是字符数组哦,我想您应该知道数组名的值是不能改变的。
1。其实数组和普通变量是差不多的,比如有int i =1;系统会自动分配空间来存储这个1,并且可以这样理解,这个空间的名字是i.然而您突然后悔了,想把那个空间重新命名为j,很显
然是不可以的(您可能会说C++中的引用,这是C语言,我不讨论了)。
2。数组名和普通变量的地址也非常相似,数组名本就是数组的首地址。还是用上面那个例子,int i=1;给1分配了空间后,那么那个地址就是固定下来了,也就是说不能改变这个地址
的。如果您想写成这样 &i = (int *)0xff;当然是不能通过编译的。这样类似表达式是不能做左值的。您代码中的++a也和这是一个道理。