gpt4 book ai didi

c - C语言中指针操作的理解问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:44 26 4
gpt4 key购买 nike

我想了解为什么有些字符会消失,然后消失连接到原始字符串中。看,c = *sibl接收到*sibl的第一个字符,*sibl = *inout 接收到*inout 的内容,但是c 中存储的字符在*inout 中不多>。并且,*inout = c 不会改变*inout 的内容,它使c 连接到* 的内容输入输出。我不明白为什么会这样!

我的代码:

void Cripto (char *inout, int i) {
char *sibl, c;
while (*inout) {
sibl = inout+1;
if (!sibl)
break;
if (*inout >= 'A' && *inout <= 'Z'){
*inout += i;
}
c = *sibl;
printf("val c %c\n",c);
printf("val inout after c %s\n",inout);
printf("val sibl after c %s\n",sibl);
*sibl = *inout;
printf("val sibl after att %s\n",sibl);
*inout = c;
printf("val inout after att %s\n",inout);
inout = sibl+1;
}
}

int main() {
char str[30];
int i;
scanf("%s %d", str, &i);
Cripto(str, i);
printf("%s\n", str);
return 0;

“teste”3 的结果:

val c: e  
val inout after c: teste
val sibl after c: este
val sibl after att: tste
val inout after att: etste
val c: t
val inout after c: ste
val sibl after c: te
val sibl after att: se
val inout after att: tse
val c:
val inout after c: e
val sibl after c:
val sibl after att: e
val inout after att:

最佳答案

您需要注意的另一件事(除非您是有意这样做的)是以下两行:

sibl = inout+1;
*sibl = *inout;

您将 sibl 指向 inout + 1,然后将 sibl 的值(本质上是指向 inout + 1 的指针)赋给 inout 的值。这将改变 inout 本身的值。因此,如果 inout 是(“123”),则 sibl 指向“23”,并且使用“*sibl = *inout”,您正在使用第一个字符设置 inout(即 sibl)的第二个字符。因此,inout 将变为“113”。

关于c - C语言中指针操作的理解问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com