gpt4 book ai didi

有人可以解释一下这个程序的输出吗?

转载 作者:行者123 更新时间:2023-11-30 20:04:33 25 4
gpt4 key购买 nike

该程序的输出是:

XBCDO HELLE

有人能解释一下为什么会这样吗?

#include<stdio.h>
void swap(char **p, char **q) {
char *temp = *p;
*p = *q;
*q = temp;
}

int main() {
int i = 10;
char a[10] = "HELLO";
char b[10] = "XBCDE";
swap(&a, &b);
printf("%s %s", a, b);
}

最佳答案

您对指针和数组之间的区别感到困惑。 (它语言中令人困惑的部分。)swap 期望指向指针的指针,但您已经给它指向数组的指针。这是一个非常严重的错误,即使您没有打开任何警告,GCC 也会发出警告(它应该发出硬错误,但是一些非常非常旧的代码故意这样做,并且它们不想破坏它)。

$ gcc test.c
test.c: In function ‘main’:
test.c:16:10: warning: passing argument 1 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types]
swap(&a, &b);
^
test.c:3:1: note: expected ‘char **’ but argument is of type ‘char (*)[10]’
swap(char **p, char **q)
^~~~
test.c:16:14: warning: passing argument 2 of ‘swap’ from incompatible pointer type [-Wincompatible-pointer-types]
swap(&a, &b);
^
test.c:3:1: note: expected ‘char **’ but argument is of type ‘char (*)[10]’
swap(char **p, char **q)
^~~~

该错误导致程序出现未定义的行为 - 它不必执行任何有意义的事情。

您可能尝试编写的程序如下所示:

#include <stdio.h>

static void swap(char **p, char **q)
{
char *temp = *p;
*p = *q;
*q = temp;
}

int main(void)
{
char a[10] = "HELLO";
char b[10] = "XBCDE";
char *c = a;
char *d = b;
swap(&c, &d);
printf("%s %s", c, d);
}

该程序的输出是XBCDE HELLO,我认为这正是您所期望的。 cd 实际上是指针,它们被设置为指向数组 ab 的第一个元素>;当应用于 cd 时,swap 按预期工作。

如果cdab不同没有任何意义,你需要获得一本好的 C 教科书,并且需要阅读有关指针的章节并完成所有练习。 (如果它没有至少一整章关于指针的内容和练习,那么它就不是一本好的 C 教科书。)

关于有人可以解释一下这个程序的输出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976917/

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