C阵列地址混乱

时间:2010-09-28 11:02:32

标签: c

假设我有以下代码:

main ()
{
  char string[20];

  printf(" The String is %s \n " , &str);
}

printf(" The String is %s \n " ,&str);会给出什么?

假设str指向位置200,&str会给出什么?

3 个答案:

答案 0 :(得分:1)

不确定你到底想要什么,但根据问题标题,你可能想知道关于数组地址的一些事情:

main ()
{
  char string[20];
  char *str = &string;

  printf("The String addr is %p \n" , &string);
  printf("The String addr is %p \n" , &string[0]);
  printf("The String addr is %p \n" , str);
  printf("The String addr is %p \n" , &str[0]);
}

所有这些都是获取“数组”地址的等效方法。数组的地址是数组的第一个元素的地址。

答案 1 :(得分:0)

你应该收到警告说

%s expects char* but argument 2 has char (*)[20] type.

地址未打印,实际上没有打印。

答案 2 :(得分:0)

假设你实际上用一个字符串初始化了数组(你没有,但我们假设你做了)然后:

类型为char (*)[20]。它将提供与

相同的输出
printf("The String is %s\n", str)

&str指向与str相同的内存位置,但属性不同;指针指向数组。 str的类型是指向char的类型。