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

标签 c pointers

我想了解为什么有些字符会消失,然后消失 连接到原始字符串中。看,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/

相关文章:

包装类的 C++ 运算符重载

c++ - 指针和文字常量

c++ - 如何删除传播或检测到的对象?

c - 用C编写系统调用,如何将整数值打印到文件

c - 在成员的赋值结构中取消引用指向不完整结构类型的指针

c++ - 如何处理复制指针的释放

c++ - 在 C++ 函数中,指针与索引数组

c - 如何显示正确答案的数量?

c - pthread 在使用虚拟核心时没有提供性能提升

c - 从动态数组 C 中删除元素