指针 - 数组和指针之间的区别

2024-04-02

有什么区别a, &a和第一个元素的地址a[0]?相似地p是一个指向用数组地址分配的整数的指针。 会pointer[]进行指针算术并根据数据类型获取值?进一步的价值是什么*预计?它应该是一个指针吗?

#include<stdio.h> 
int main()
{
int a[] = {5,6,7,8};
int *p = a;
printf("\nThis is the address of a %u, value of &a %u, address of first element %u, value pointed by a %u", a, &a, &a[0], *a);
printf("\nThis is the address at p %u, value at p %u and the value pointed by p %d", &p, p, *p);
printf("\n");
}

This is the address of a 3219815716, value of &a 3219815716, address of first element 3219815716, value pointed by a 5
This is the address at p 3219815712, value at p 3219815716 and the value pointed by p 5

int a[]={5,6,7,8};
int *p= a;

请注意,在数组的情况下(在大多数情况下),请说数组a, the ADDRESS_OF aADDRESS_OF数组的第一个元素,即ADDRESS_OF(a)ADDRESS_OF(a[0]). & is the ADDRESS_OF运算符,因此在数组的情况下a, &a and &a[0]都是一样的。

我已经强调过,在大多数情况下,数组的名称会被转换为其第一个元素的地址;一个值得注意的例外是当它是 sizeof 的操作数时,如果与 malloc 相关的东西要工作,这一点是必不可少的。另一种情况是数组名称是 & 地址运算符的操作数。这里,它被转换成整个数组的地址。有什么不同?即使您认为地址在某种程度上是“相同的”,但关键的区别在于它们具有不同的类型。对于 T 类型的 n 个元素的数组,则第一个元素的地址具有“指向 T 的指针”类型;整个数组的地址具有类型“指向 T 类型的 n 个元素的数组的指针”;显然非常不同。

这是一个例子:

int ar[10];
int *ip;
int (*ar10i)[10];       /* pointer to array of 10 ints */

ip = ar;                /* address of first element */


ip = &ar[0];            /* address of first element */
ar10i = &ar;            /* address of whole array */

更多信息您可以参考C 书。 http://publications.gbdirect.co.uk/c_book/chapter5/arrays_and_address_of.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指针 - 数组和指针之间的区别 的相关文章

随机推荐

  • Python:使用 Openpyxl 读取大型 Excel 工作表

    我有一个 Excel 文件 其中包含大约 400 个工作表 其中 375 个工作表需要保存为 CSV 文件 我尝试过 VBA 解决方案 但 Excel 在打开此工作簿时遇到问题 我创建了一个 python 脚本来做到这一点 然而 它会迅速消
  • UISegmentedControl 截断段标题

    我的 iPhone 应用程序中有一个分段控件 在 ios6 上运行良好 但在 ios7 上 分段图块被截断 有足够的空间容纳文本 但无论如何都会截断它们 self segmentedControl segmentedControlStyle
  • tf.estimator.train_and_evaluate 出错了 评估精度和损失

    I use tf estimator train and evaluate训练和评估我的模型 这是我的代码 import tensorflow as tf import numpy as np from tensorflow contrib
  • 为什么 C++ 友元类只需要在其他命名空间中进行前向声明?

    假设我有一堂课F那应该是班级的朋友G 在全局命名空间中 和C 在命名空间中A 成为朋友A C F必须向前声明 成为朋友G 没有前向声明F是必要的 同样 一个类A BF可以成为朋友A C无前置声明 以下代码说明了这一点 并使用 GCC 4 5
  • 将 C++ 代码从 Windows 移植到 Mac

    我是一名长期的 Windows 开发人员 看起来我将参与将 Windows 应用程序移植到 Mac 的工作 我们决定对两侧的 GUI 使用 Flex Air 顺便说一句 它看起来非常光滑 我的 Windows 应用程序有一个控制网络适配器
  • R 错误:“尝试在 get1index 中选择少于一个元素”

    我是 R 初学者 我正在尝试使用该包ClonEvol 但是 github 网页上的文档非常有限 所以现在我正在使用他们的示例代码并尝试将其适应我的数据 称为ce ce lt data frame cluster c 1 1 1 1 2 2
  • 为什么“this”指针在单步执行代码时会改变其值?

    我正在调试崩溃 我注意到调试器的一个步骤 this指针改变了它的值 经过 3 个步骤 它最终得到了值 0x00000001 应用程序崩溃了 现在 0x00000001 值显然是错误的 但我真的应该期待吗this当我单步执行调试器时值会改变吗
  • Chrome 文件阅读器

    有人可以给我一个使用 FileReader API 在 chrome 中获取文件内容的示例吗 似乎要回归了undefined for me
  • 如何使用 Espresso 检查 Viewpager 项目 ID?

    我有一个 Viewpager 它由相同片段视图的副本组成 您可以在它们之间滑动 我正在编写一个 Espresso 测试并尝试对每个页面的 id 进行断言 但它们显然是不明确的 因为加载了多个页面并且它们都共享相同的 id 我不想将视图寻呼机
  • 有效地在多个维度上查找邻居并根据邻近度计算值的总和

    我的任务是找到中心元素可变距离内所有元素的总价值 这些元素使用 3 个维度 我的数据中的列 进行排列 每个元素在给定 3 个维度的情况下都有一个唯一的位置 并且有一个唯一的 id 我有一个可以完成我想要的工作的版本 但是它非常慢 我正在使用
  • grep 与不包含关键字的后上下文[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想 grep 日志 并收集某个异常堆栈跟踪 但我只想查看那些在 after context 中不包含某些关键字的异常 我不知道关键字在后上下文中的哪
  • 编译项目时出现25.0.0错误

    我有一个项目到目前为止运行良好 今天突然面临这些问题 Error A problem occurred configuring project app gt Could not resolve all dependencies for co
  • rgl:绘制带有彩色面、顶点和线的立方体

    为了演示 3D 线性变换的效果 x gt A x 我想画一个立方体并在下面显示它的变换A 为此 我需要分别为每个面着色 并显示顶点和勾勒每个面的线条 我不知道如何为脸部使用不同的颜色 以及如何使其更通用 因此我不必在转换下重复所有步骤来获得
  • Flask - ImportError:没有名为 app 的模块

    首先我创建了 init py from flask import Flask app Flask name 然后在同一目录中的单独文件中 run py from app import app app run debug True 当我尝试跑
  • 将 Javadoc 添加到 NetBeans 中的库

    我刚开始使用 NetBeans IDE 当我尝试查看 java API 的文档时 例如 Systemclass 它说 javadoc 没有安装 如何安装文档 首先 您下载 javadoc 其次 转到 工具 gt Java 平台 然后从 Ja
  • 确定递归函数的复杂性(大 O 表示法)

    我明天有计算机科学期中考试 我需要帮助确定这些递归函数的复杂性 我知道如何解决简单的情况 但我仍在努力学习如何解决这些更困难的情况 这些只是我无法解决的一些示例问题 任何帮助将不胜感激 并对我的学习有很大帮助 谢谢 int recursiv
  • 如何以编程方式询问当前应用程序的 URL 方案?

    我的 iOS 应用程序有 50 多个目标 每个目标都有自己的自定义 URL 方案 我需要检测来自 webview 的请求是否与当前运行的应用程序的方案匹配 为了做到这一点 我需要能够从代码中询问当前应用程序的 URL 方案 类似的问题涉及尝
  • MySQL如何获取特定范围内的平均值

    我有以下表格数据 value 1 5 10 5 12 36 我想将这些值映射到 range avg 0 21 1 5 10 5 12 4 21 001 34 0 34 001 64 36 64 0 基本上将每个值映射到范围并计算每个范围内所
  • Android dagger依赖循环

    我有两个具有相同范围的依赖项 彼此需要 我的依赖项是具有不同方法的域服务 每种方法都有不同的业务案例 某些业务案例可能会使用另一个领域的方法 为此 我需要域 1 可用于域 2 反之亦然 但是当我这样做时 我收到依赖循环编译错误 经过谷歌搜索
  • 指针 - 数组和指针之间的区别

    有什么区别a a和第一个元素的地址a 0 相似地p是一个指向用数组地址分配的整数的指针 会pointer 进行指针算术并根据数据类型获取值 进一步的价值是什么 预计 它应该是一个指针吗 include