当前位置: 首页 > 知识库问答 >
问题:

为什么不能将c指针视为数组?

公良天逸
2023-03-14

在C中不使用sizeof查找数组大小的问题中,asker将int数组视为int数组的数组,方法是获取地址,然后指定数组索引为1:

int arr[100];
printf ("%d\n", (&arr)[1] - arr);
int *y = NULL;
printf("y = %d\n", y);
printf("(&y)[0] = %d\n", (&y)[0]);
printf("(&y)[1] = %d\n", (&y)[1]);
y = 1552652636
(&y)[0] = 1552652636
(&y)[1] = 0

共有1个答案

全流觞
2023-03-14

这里:

printf("(&y)[1] = %d\n", (&y)[1]);

您首先说:取y的地址。然后,您说:添加1倍于所指向的东西大小的字节--这是指向int的指针,因此可能会添加4个字节--并取消对该地址的引用。但是你不知道新的内存地址上有什么,你不能/不应该访问它。

 类似资料:
  • 问题1. 为什么将原生指针放到智能指针里后,再通过 get()取出来的地址和原生指针地址不同呢? 比如例子中打印的base0和 base2不同。 问题2. 为什么将 nullptr 放到智能指针里后,通过 get()取出来的地址不是 nullptr 呢? 那如果判断智能指针管理的原生指针是否为 nullptr呢? 输出: base0=0x156704080 base1=0x0 base2=0x15

  • 问题内容: 如果我删除in : github.com/creating_web_app_go/main.go:8:不能在http.HandleFunc的参数中使用func文字(类型func(http.ResponseWriter,http.Request))作为func(http.ResponseWriter,* http.Request)类型。 我对Go和指针都很陌生。 所以问题是,为什么必须是

  • 关于指针的转换,C草案标准(N3337)有以下内容: 4.10指针转换 2“指向cv的指针”类型的右值(其中T是对象类型)可以转换为“指向cv的指针无效”类型的右值将“指向cv的指针”转换为“指向cv的指针无效”的结果指向类型为T的对象所在的存储位置的起点,就好像该对象是类型为T的派生度最高的对象(1.8)(即,不是基类子对象)。 和 4.12布尔转换 1算术、枚举、指针或指向成员类型的指针的右值

  • 问题内容: 给定golang巡回演出的第54张幻灯片中的设置: 为什么不能同时为结构体和指向结构体的指针定义方法?那是: 定义此将产生以下错误: 问题答案: 它可以。只需在结构而不是指针上定义它即可。它将解决两种方式 方法集 对应的指针类型 T的方法集是接收者 T或T的所有方法的集(即,它也包含T的方法集) 尝试直播:http://play.golang.org/p/PsNUerVyqp 更新:

  • 当我构建这个应用程序时,我得到错误: 我也试过: 这将错误更改为: 下面是调用这个例程的类和我传递的回调函数的示例:

  • 问题内容: 有一个很大的材料了有这表明印刷异常的堆栈跟踪是不好的做法。 例如从Checkexp中的RegexpSingleline检查: 可以使用此检查来查找常见的不良做法,例如调用ex.printStacktrace() 但是,我正在努力寻找能够给出正当理由的任何地方,因为肯定可以使堆栈跟踪对于跟踪导致异常的原因非常有用。我知道的事情: 最终用户永远不应看到堆栈跟踪(出于用户体验和安全目的) 生