1)
int main()
{
int *j,i=0;
int A[5]={0,1,2,3,4};
int B[3]={6,7,8};
int *s1=A,*s2=B;
while(*s1++ = *s2++)
{
for(i=0; i<5; i++)
printf("%d ", A[i]);
}
}
2)
int main()
{
char str1[] = "India";
char str2[] = "BIX";
char *s1 = str1, *s2=str2;
while(*s1++ = *s2++)
printf("%s ", str1);
}
Run Code Online (Sandbox Code Playgroud)
第二个代码工作正常,而第一个代码导致一些错误(可能是分段错误).但是如何在程序2中的指针变量s2工作正常(即直到字符串的结尾),而不是在程序1中,它无限运行....另外,在第二个程序中,s2变量不会增加超出阵列的长度?
C中带字符串的东西是它们有一个标记字符串结尾的特殊字符.这是'\0'角色.此特殊字符的值为零.
在第二个程序中,您拥有的数组包含终结符字符,因为它是零,当在布尔表达式中使用时(例如while循环中的条件),它被视为"false" .这意味着你在第二个程序中的循环将字符复制到包括终结符字符,但由于这是"假",循环将结束.
在第一个程序中没有这样的终结符,循环将继续并超出界限,直到它随机发生在你要复制的内存中找到零.这会导致不确定的行为,这是崩溃的常见原因.
所以不同之处不在于如何处理指针,而在数据中.如果在第一个程序(B)中的源数组末尾添加零,那么它也可以正常工作.