在 C 语言中使用指针 & 符号

Jinku Hu 2023年10月12日
  1. 使用&var 符号获取给定变量的地址
  2. 使用*ptr 符号从指针访问变量的值
  3. 使用&符号向函数传递对象的地址
在 C 语言中使用指针 & 符号

本文将介绍在 C 语言中如何使用指针 & 符号的多种方法。

使用&var 符号获取给定变量的地址

指针只是持有内存地址的变量。它们用 type *var 符号来声明。指针可以被分配给任何相同类型的地址,任何指针类型都可以存储 void*指针,它被称为通用指针。既然我们有一个存储对象地址的类型,就应该有一个操作符提供对一个对象的访问。

&作为一元运算符,通常被称为取址运算符。它可以用于数据对象和函数上,以检索对象的存储地址。

假设我们声明并初始化了一个整数 x,如下例所示。在这种情况下,我们可以用取址运算符&取其地址,并将其分配给 int *xptr 变量。因此,xptr 指向的值是 10233,在后续的代码中可以利用运算符*来访问它的值。

注意,星号*在这里有两种不同的情况下使用。一个是声明一个指针类型的变量。另一个是用来从指针访问变量的值,后一种情况叫做去引用。

#include <stdio.h>
#include <stdlib.h>

int main() {
  int x = 10233;
  int *xptr = &x;  // xptr now points to x

  printf("x: %d\n", x);
  printf("*xptr: %d\n", *xptr);

  exit(EXIT_SUCCESS);
}

输出:

x: 10233
*xptr: 10233

使用*ptr 符号从指针访问变量的值

可以利用去引用操作符从指针中获取值,并将它们分配给相同类型的变量。请注意,*操作符不能用于 null 或无效指针,因为它会导致未定义的行为。在大多数情况下,如果尝试使用 null 指针,程序很可能会崩溃。但如果访问无效指针,可能会被忽略。无效指针可能指向内存中的某个任意对象,对它的操作仍然会进行,但它可能会破坏程序状态的正确性。

#include <stdio.h>
#include <stdlib.h>

int main() {
  int x = 10233;
  int *xptr = &x;  // xptr now points to x

  int y = *xptr;  // y now holds the value 10233
  printf("x: %d\n", x);
  printf("y: %d\n", y);

  exit(EXIT_SUCCESS);
}

输出:

x: 10233
y: 10233

使用&符号向函数传递对象的地址

利用取址运算符的最常见的例子是传递一个指向对象的指针作为函数参数。下面的例子演示了 swap 函数,它将两个整数指针作为参数。请注意,当从 main 函数中调用 swap 时,使用了&运算符来传递 xy 变量的地址。不过请注意,swap 函数主体中的*运算符表示指针的去引用。

#include <stdio.h>
#include <stdlib.h>

void swap(int *x, int *y) {
  int tmp = *x;
  *x = *y;
  *y = tmp;
}

int main() {
  int x = 10233;
  int y = 10133;

  printf("x:%d, y:%d\n", x, y);
  swap(&x, &y);
  printf("x:%d, y:%d\n", x, y);

  exit(EXIT_SUCCESS);
}

输出:

x:10233, y:10133
x:10133, y:10233
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C Pointer