- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题in C, how come the address of array, &array, &array[0] are the same?让我研究指针和数组:我确认它们非常相似但不相同。
&a[0]
是 a
或 &a
的详细形式。但是 &
与 []
的优先级又如何呢?
当我以错误的方式放置括号时,例如 (&a)[1]
,这改变了值,但 (&a)[0]
没有改变。
#include <stdio.h>
int main(){
int a[3] = {10,20,30};
int *b;
b = a;
printf("%p a\n", a);
printf("%p a+1\n", a+1);
printf("%p a+2\n\n", a+2);
printf("%p (&a)[0]\n", (&a)[0]);
printf("%p (&a)[1]\n", (&a)[1]);
printf("%p (&b)[0]\n", (&b)[0]);
printf("%p (&b)[1]\n\n",(&b)[1]);
printf("%p cast\n\n", (void **)((&a) + 1) );
int *c = a;
printf("%p\n", c);
printf("%p\n", &c);
return 0;
}
输出:
0x7ffe18053c9c a
0x7ffe18053ca0 a+1
0x7ffe18053ca4 a+2
0x7ffe18053c9c (&a)[0]
0x7ffe18053ca8 (&a)[1]
0x7ffe18053c9c (&b)[0]
(nil) (&b)[1]
0x7ffe18053ca8 cast
0x7ffe18053c9c c (int *c = a)
0x7ffe18053c90 &c
我发现 (void **)((&a) + 1)
得到了相同的结果。看来是不能漏掉一 block 了。突然&a
确实匿名创建了一个指针。
使用索引零,您可以通过a
及其指针b
获得基地址(...c9c)。但是索引为 1 时会发生奇怪的事情,并且 b
的情况有所不同。
这有什么规则吗?我什至不知道我是否想听!除了位于 a
和 &a[0]
之间之外,这就是 &a
的作用吗?
这里是 chux 的好 A。他的 Actor 阵容更简单,但效果一样吗?
difference between &array and &array[0] in C
从提到的链接中,我不仅简化了我的转换,而且现在我想我知道它的作用以及为什么 0 的索引或偏移量是特殊的。
(void *)(&a + 0)
是强制转换。但为什么还要投呢? &a + 0
打印基地址。使用偏移量 + 1 时,地址会前进整个数组大小(不是我尝试的指针)-“超出末尾”。第二维度。基数保留,但偏移量发生变化。
对于作业:
int *c = a;
int (*d)[3] = &a; // with some help from the left...
int *e = (int *)&a; // ... or on the right side...
int *f = &a; // or with a warning, but working
那么 (&a)
会生成一个新类型,而不是指针?对同一地点的新引用。 = 指向 = 数组的指针的地址。
最佳答案
TL;博士:
&a[0]
返回数组a
第一个元素的地址。由于 C 中的数组几乎总是自动衰减(转换)为指向其第一个元素的指针,因此通过查看 a
和 &a[0]
,您将观察到相同的行为>。但请注意,在某些情况下这种转换不会发生,最明显的一种是在数组上使用 sizeof
运算符。
(&a)[0]
获取数组的地址,然后将结果视为数组并尝试访问它的第一个元素。这与仅取消引用结果指针相同,因此 (&a)[0]
与 *(&a)
相同,与 a< 相同
。比见上面。
(&a)[1]
几乎与之前类似,但它尝试访问由指向数组的指针构造的假设数组的第二个元素一个
。由于这实际上不是一个数组,并且没有第二个元素,因此该代码格式不正确,并会触发未定义行为。
关于arrays - (&array)[1] 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67386186/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!