gpt4 book ai didi

c - 为什么类型在 C 中的这个值交换代码中不匹配?

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:45 24 4
gpt4 key购买 nike

void swap(char *a,char *b){
char t;
t = *a;
*a = *b;
*b = t;
}
int main(void){
char a = '1';
char b = '2';

swap(&a,&b);
printf("The value is %c and %c respectively\n",a,b);
return 0;
}

在上面的代码中,有一个地方让我感到困惑

我觉得如果a是一个指针,*a就是它指向的值

int *ptr, a = 1;

ptr = &a;
printf("The value of *ptr should be a: %d\n",*ptr);
printf("The value of *a should be an hex address: %p\n",ptr);

所以在 swap(char *a, char *b) 函数中,它取值而不是指针(*a 不是 a),

交换(&a, &b)但它实际上将指针值作为参数传递给它,并且代码有效。任何人都可以向我解释一下吗?(我认为对于 swap(char *a){...} 部分,声明并不意味着它需要 *a 传入,它意味着声明一个指针值 a,而不是 a 指向的值,因为 *a 在其他地方意味着)。

最佳答案

* 令人困惑,因为它表示两个不同但密切相关的事物。在变量声明中,* 表示“指针”。在表达式 中,* 表示“解引用指针”。

它旨在成为一个有用的助记符:如果您的代码中有 char *a,则表示 *a 是一个 char

关于c - 为什么类型在 C 中的这个值交换代码中不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11553491/

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