C语言指针的实例介绍

158 阅读2分钟

在我看来,指针是C语言中最令人困惑/挑战的部分之一。特别是如果你是编程新手,但如果你来自Python或JavaScript这样的高级编程语言。

在这篇文章中,我想以最简单但不笨的方式介绍它们。

指针是指包含一个变量的内存块的地址。

当你像这样声明一个整数的时候。

我们可以使用& 运算符来获得一个变量在内存中的地址值。

printf("%p", &age); /* 0x7ffeef7dcb9c */

我使用printf() 中指定的%p 格式来打印地址值。

我们可以将地址分配给一个变量。

在声明中使用int *address ,我们不是在声明一个整数变量,而是一个指向整数的指针

我们可以使用指针操作符* ,以获得一个地址所指向的变量的值。

int age = 37;
int *address = &age;
printf("%u", *address); /* 37 */

这次我们又使用了指针运算符,但由于这次不是声明,所以它的意思是 "这个指针所指向的变量的值"。

在这个例子中,我们声明了一个age 变量,并使用了一个指针来初始化这个值。

int age;
int *address = &age;
*address = 37;
printf("%u", *address);

在使用C语言时,你会发现很多东西都是建立在这个简单的概念之上的,所以要确保你对它熟悉一些,通过自己运行上面的例子。

指针是一个很好的机会,因为它迫使我们思考内存地址和数据的组织方式。

数组就是一个例子。当你声明一个数组时。

int prices[3] = { 5, 4, 3 };

prices 变量实际上是一个指向数组中第一项的指针。在这种情况下,你可以使用这个printf() 函数来获得第一项的值。

printf("%u", *prices); /* 5 */

最酷的是,我们可以通过在prices 指针上加1来获得第二个项。

printf("%u", *(prices + 1)); /* 4 */

以此类推,所有其他的值都是如此。

我们还可以做许多漂亮的字符串操作,因为字符串在引擎盖下就是数组。

我们还有更多的应用,包括将一个对象或一个函数的引用传递出去,以避免消耗更多的资源来复制它。