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/