这些陈述都会返回一个地址吗?

时间:2013-11-18 14:43:16

标签: c arrays pointers memory-address

说你在C中有一个字符数组。像这样:

char array[];

现在,下面的哪个陈述将打印出地址。我知道1)和2)会,但3)也打印出地址吗?

1) printf("Arrays adress is %x\n", array);
2) printf("Arrays adress is %x\n", &array[0]);
3) printf("Arrays adress is %x\n", &array);

3 个答案:

答案 0 :(得分:6)

他们都不是。所有这些都会打印垃圾值,即你的程序的行为未定义


编辑:由于OP现在改变了他的问题,答案是:

所有人都会使用%p说明符打印地址,并将array&array&array[0]分别投放到void *

char array[5]; //let's assume an array of 5 chars  

printf("Arrays adress is %p\n", (void *)array);
printf("Arrays adress is %p\n", (void *)&array[0]);
printf("Arrays adress is %p\n", (void *)&array);

答案 1 :(得分:2)

假设array应阅读text 且声明为char text[] ="...something ..." ,您将使用%p代替%x并传递了传递给void*的值:是的,会打印一些地址。

答案 2 :(得分:1)

不是真的,如果你想打印出内存地址(指针值),我会使用正确的格式:

printf("The address is: %p\n", &array);

例如,%x将只打印 int 作为相应参数传递的十六进制值。完成后,所有三个语句都打印出完全相同的内容:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char foo[] = "Some string";
    printf("%p\n%p\n%p\n", (void *)foo, (void *)&foo, (void *)&foo[0]);
    return 0;
}

打印出同样的东西,三次 正如H2CO3指出的那样,你需要转换为printf的void指针,尽管

通常,数组计算其第一个元素的地址。这就是为什么array&array&array[0]都会生成相同的值。 You can read all about it here