C 语言指针完全指南:创建、解除引用、指针与数组关系解析
C 语言中的指针
创建指针
我们可以使用引用运算符 &
获取变量的内存地址:
指针是一个将另一个变量的内存地址作为其值的变量。
指针变量指向一个数据类型(如 int
)的相同类型,并使用 *
运算符创建。您正在使用的变量的地址被分配给指针:
示例解释:
创建一个名为
ptr
的指针变量,指向一个int
变量 (myAge
)。请注意,指针的类型必须与您正在使用的变量的类型匹配(本例中为int
)。使用
&
运算符将myAge
变量的内存地址存储并分配给指针。现在,
ptr
存储了myAge
的内存地址值。
解除引用
在上面的示例中,我们使用指针变量来获取变量的内存地址(与 &
引用运算符一起使用)。
您还可以通过使用 *
运算符(取消引用运算符)获取指针指向的变量的值:
请注意,*
符号在这里可能会让人困惑,因为它在我们的代码中做了两件事:
当用于声明 (
int* ptr
) 时,它会创建一个指针变量。当不用于声明时,它充当取消引用运算符。
值得注意:在 C 语言中声明指针变量有两种方法:
关于指针的注意事项:
指针是 C 语言区别于其他编程语言(如 Python 和 Java)的一大特点。
它们在 C 语言中很重要,因为它们允许我们操作计算机内存中的数据。这可以减少代码量并提高性能。如果您熟悉像列表、树和图这样的数据结构,您应该知道指针对于实现它们特别有用。有时您甚至必须使用指针,例如在处理文件时。
但是要小心; 指针必须谨慎处理,因为有可能损坏存储在其他内存地址的数据。
C 语言中的指针和数组
您也可以使用指针访问数组。
考虑以下整数数组
结果:
让我们尝试打印每个数组元素的内存地址,而不是打印每个数组元素的值:
结果:
请注意,每个元素的内存地址的最后一位数字都不同,增加了 4。
这是因为 int
类型的大小通常为 4 个字节,请记住:
结果:4
因此,从上面的“内存地址示例”中,
您可以看到编译器为每个数组元素预留了 4 个字节的内存,这意味着整个数组占用 16 个字节(4 * 4)的内存存储空间:
结果:16
指针与数组的关系
好的,那么指针和数组之间有什么关系呢?好吧,在 C 语言中,数组的名称实际上是指向数组第一个元素的指针。
感到困惑?让我们试着更好地理解这一点,并再次使用上面的“内存地址示例”。
第一个元素的内存地址与数组的名称相同:
结果:
这基本上意味着我们可以通过指针来操作数组!
怎么操作呢?由于 myNumbers
是指向 myNumbers
中第一个元素的指针,因此您可以使用 *
运算符来访问它:
结果:25
要访问 myNumbers
中的其他元素,您可以增加指针/数组(+1、+2 等):
结果:
或者循环遍历它:
结果:
您也可以使用指针更改数组元素的值:
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
版权声明: 本文为 InfoQ 作者【小万哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/edb1443bb86d8421ca106cb3f】。文章转载请联系作者。
评论