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

标签 c pointers

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/

相关文章:

c++ - 在 C++ 中初始化静态指针

c - 什么构成异步安全

c - 如何使用正则表达式来匹配字符串的一部分

c++ - 一个简单的cuda编译出错

c - 在 Windows 上生成带有 .ico 扩展名的临时文件名

c - 从c问题中的函数返回char指针

c - Time.h 在 C 中提供错误答案

c++ - 将 3D 指针数组传递给函数

更改 netbeans C 项目发布和调试文件夹

C++ 指向对象的类成员的指针