C 语言指针完全指南:创建、解除引用、指针与数组关系解析
C 语言中的指针创建指针我们可以使用引用运算符获取变量的内存地址代码语言cAI代码解释int myAge 43; // 一个 int 变量 printf(%d, myAge); // 输出 myAge 的值 (43) printf(%p, myAge); // 输出 myAge 的内存地址 (0x7ffe5367e044)指针是一个将另一个变量的内存地址作为其值的变量。指针变量指向一个数据类型如int的相同类型并使用*运算符创建。您正在使用的变量的地址被分配给指针代码语言cAI代码解释int myAge 43; // 一个 int 变量 int* ptr myAge; // 一个名为 ptr 的指针变量存储 myAge 的地址 // 输出 myAge 的值 (43) printf(%d\n, myAge); // 输出 myAge 的内存地址 (0x7ffe5367e044) printf(%p\n, myAge); // 使用指针输出 myAge 的内存地址 (0x7ffe5367e044) printf(%p\n, ptr);示例解释:创建一个名为ptr的指针变量指向一个int变量 (myAge)。请注意指针的类型必须与您正在使用的变量的类型匹配本例中为int。使用运算符将myAge变量的内存地址存储并分配给指针。现在ptr存储了myAge的内存地址值。解除引用在上面的示例中我们使用指针变量来获取变量的内存地址与引用运算符一起使用。您还可以通过使用*运算符取消引用运算符获取指针指向的变量的值代码语言cAI代码解释int myAge 43; // 变量声明 int* ptr myAge; // 指针声明 // 引用使用指针输出 myAge 的内存地址 (0x7ffe5367e044) printf(%p\n, ptr); // 解除引用使用指针输出 myAge 的值 (43) printf(%d\n, *ptr);请注意*符号在这里可能会让人困惑因为它在我们的代码中做了两件事当用于声明 (int* ptr) 时它会创建一个指针变量。当不用于声明时它充当取消引用运算符。值得注意在 C 语言中声明指针变量有两种方法代码语言cAI代码解释int* myNum; int *myNum;关于指针的注意事项:指针是 C 语言区别于其他编程语言如 Python 和 Java的一大特点。它们在 C 语言中很重要因为它们允许我们操作计算机内存中的数据。这可以减少代码量并提高性能。如果您熟悉像列表、树和图这样的数据结构您应该知道指针对于实现它们特别有用。有时您甚至必须使用指针例如在处理文件时。但是要小心; 指针必须谨慎处理因为有可能损坏存储在其他内存地址的数据。C 语言中的指针和数组您也可以使用指针访问数组。考虑以下整数数组代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; int i; for (i 0; i 4; i) { printf(%d\n, myNumbers[i]); }结果代码语言cAI代码解释25 50 75 100让我们尝试打印每个数组元素的内存地址而不是打印每个数组元素的值代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; int i; for (i 0; i 4; i) { printf(%p\n, myNumbers[i]); }结果代码语言cAI代码解释0x7ffe70f9d8f0 0x7ffe70f9d8f4 0x7ffe70f9d8f8 0x7ffe70f9d8fc请注意每个元素的内存地址的最后一位数字都不同增加了 4。这是因为int类型的大小通常为 4 个字节请记住代码语言cAI代码解释// 创建一个 int 变量 int myInt; // 获取一个 int 的内存大小 printf(%lu, sizeof(myInt));结果4因此从上面的“内存地址示例”中您可以看到编译器为每个数组元素预留了 4 个字节的内存这意味着整个数组占用 16 个字节4 * 4的内存存储空间代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; // 获取 myNumbers 数组的大小 printf(%lu, sizeof(myNumbers));结果16指针与数组的关系好的那么指针和数组之间有什么关系呢好吧在 C 语言中数组的名称实际上是指向数组第一个元素的指针。感到困惑让我们试着更好地理解这一点并再次使用上面的“内存地址示例”。第一个元素的内存地址与数组的名称相同代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; // 获取 myNumbers 数组的内存地址 printf(%p\n, myNumbers); // 获取第一个数组元素的内存地址 printf(%p\n, myNumbers[0]);结果代码语言cAI代码解释0x7ffe70f9d8f0 0x7ffe70f9d8f0这基本上意味着我们可以通过指针来操作数组怎么操作呢由于myNumbers是指向myNumbers中第一个元素的指针因此您可以使用*运算符来访问它代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; // 获取 myNumbers 中第一个元素的值 printf(%d, *myNumbers);结果25要访问myNumbers中的其他元素您可以增加指针/数组1、2 等代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; // 获取 myNumbers 中的第二个元素的值 printf(%d\n, *(myNumbers 1)); // 获取 myNumbers 中的第三个元素的值 printf(%d, *(myNumbers 2)); // 等等..结果代码语言cAI代码解释50 75或者循环遍历它代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; int *ptr myNumbers; int i; for (i 0; i 4; i) { printf(%d\n, *(ptr i)); }结果代码语言cAI代码解释25 50 75 100您也可以使用指针更改数组元素的值代码语言cAI代码解释int myNumbers[4] {25, 50, 75, 100}; // 将第一个元素的值改为 13 *myNumbers 13; // 将第二个元素的值改为 17最后为了方便其他设备和平台的小伙伴观看往期文章
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2432913.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!