char a[5] = "hill";
我很困惑......实际上 a 是什么?它被认为是 char * 类型。它是一个指针,它的值必须是第一个字符的地址。 a 本身必须有一个地址。当然,这两个地址必须不同,因为 a 的类型为 char * ,而它所持有的地址指向 char 。
std::cout << (int)&a << ' ' << (int)a << std::endl;
哦,好的,打印出完全相同的地址。请解释一下,这里发生了什么
答案 0 :(得分:0)
我很困惑......究竟是什么?它被称为char *
类型
如果您像以下一样定义数组:@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(),CategorySelector.class);
intent.putExtra("sorting_category_name",names.get(v.getId()));
startActivity(intent);
}
。
以下是:
<nav class='navbar navbar-inverse navbar-toggleable-sm mx-auto sticky-top'>
<button class="navbar-toggler collapsed mx-auto" type="button" data-toggle="collapse" data-target="#navbarNav" aria-expanded="false" aria-controls="navbarNav" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class='navbar-nav mx-auto'>
<li class='nav-item'><a href='#sobreMim' class='nav-link'><strong>Diego Mengue</strong></a></li>
<li class='nav-item'><a href='#portfolio' class='nav-link'>Portfólio</a></li>
<li class='nav-item'><a href='#contato' class='nav-link'>Contato</a></li>
</ul>
</div>
</nav>
所有这些都指向相同的内存地址,但它们的类型不同。请注意,在案例1中,数组名称将为decayed。
哦,好的,打印出完全相同的地址。请解释一下,这里发生了什么
这意味着如果您打印出char a[5] = "hill;"
或1. a implicitly decayed to char *: decayed to a pointer to the first element
2. &a[0] is of type char *: pointer to the first element
3. &a is of type char (*)[5]: pointer to an array which starts at the first element
的地址,它将是相同的。另请记住,如果您要打印地址,则将指针投射到a
而不仅仅是&a
。
它是一个指针,它的值必须是第一个字符的地址。一个人必须有一个地址。当然这两个地址必须不同,因为它是char *类型,它所持有的地址指向char。
假设void*
隐含地指向第一个元素,你是对的。此变量还有一个地址,其中存储了指向某个东西的值。
编辑#1:
上述证据:
有几条评论受到质疑,我在int
,a
和a
解释的内容就是证据。因此,我写了一点不编译C代码:
&a[0]
编译器将失败并输出错误和预期类型。
&a
<强>的sizeof():强>
以下是不同的int main()
{
char a[5];
double b;
/* the following fails */
b = a; /* decay to char * */
b = &a[0]; /* char * */
b = &a; /* char (*)[5] */
}
操作返回的内容:
../src/SO_Test_C.c:6:7: error: incompatible types when assigning to type ‘double’ from type ‘char *’
b = a;
^
../src/SO_Test_C.c:7:7: error: incompatible types when assigning to type ‘double’ from type ‘char *’
b = &a[0];
^
../src/SO_Test_C.c:8:7: error: incompatible types when assigning to type ‘double’ from type ‘char (*)[5]’
b = &a;
^