//————————————————————
int len=5;
char a="abcdef";
char* arr=a;
int j=0;
for( j=0;j<len-1;j++)
{
*(arr+j)=*(arr+j+1);
}
循环结束后(arr+j+1)等于多少
为什么我调试至循环结束(arr+j+1)=0
//————————————————————
int len=5;
char a="abcdef";
char* arr=a;
int j=0;
for( j=0;j<len-1;j++)
{
*(arr+j)=*(arr+j+1);
}
循环结束后(arr+j+1)等于多少
为什么我调试至循环结束(arr+j+1)=0
【以下回答由 GPT 生成】
根据给出的代码,循环结束后,arr+j+1
的值应该是0
。
解决该问题的步骤如下:
len
表示数组a
的长度,长度为5。arr
是指向数组a
的指针,指向数组的第一个元素。所以初始时,arr
指向字符'a'
。j
的值为0。循环条件为j < len-1
,即0 < 4
,满足条件,进入循环。*(arr+j) = *(arr+j+1)
。*(arr+j)
表示取指针arr
指向位置的值,即取到了字符'a'
,而*(arr+j+1)
表示取指针arr
指向位置的下一个位置的值,即取到了字符'b'
。将字符'b'
赋值给字符'a'
,所以此时数组a
变成了"bbcde"
。j
的值加1,此时j
的值为1。检查循环条件,仍然满足,继续执行循环体。*(arr+j) = *(arr+j+1)
。此时*(arr+j)
表示取指针arr
指向位置的值,即取到了字符'b'
,而*(arr+j+1)
表示取指针arr
指向位置的下一个位置的值,即取到了字符'c'
。将字符'c'
赋值给字符'b'
,所以此时数组a
变成了"bccde"
。j
的值加1,此时j
的值为2。检查循环条件,仍然满足,继续执行循环体。*(arr+j) = *(arr+j+1)
。此时*(arr+j)
表示取指针arr
指向位置的值,即取到了字符'c'
,而*(arr+j+1)
表示取指针arr
指向位置的下一个位置的值,即取到了字符'd'
。将字符'd'
赋值给字符'c'
,所以此时数组a
变成了"bccde"
。j
的值加1,此时j
的值为3。检查循环条件,仍然满足,继续执行循环体。*(arr+j) = *(arr+j+1)
。此时*(arr+j)
表示取指针arr
指向位置的值,即取到了字符'c'
,而*(arr+j+1)
表示取指针arr
指向位置的下一个位置的值,即取到了字符'e'
。将字符'e'
赋值给字符'c'
,所以此时数组a
变成了"bcede"
。j
的值加1,此时j
的值为4。检查循环条件,不满足,退出循环。a
已经变成了"bcede"
。arr
时,会以字符串的形式展示数组,即"bcede"
。而查看arr+j+1
时,由于已经越界访问到了数组之外的位置,所以显示的是该位置的内存内容,即0
。所以,循环结束后,arr+j+1
的值是0
。
【相关推荐】