首页 > C语言数组取地址

C语言数组取地址

#include <stdio.h>
int main()  
{      
    char str[80];
    printf("Enter the string:");
    scanf("%s", &str[0]);
    printf("%d", &str[0]);
    printf("%d", &str);
    printf("%d", str);
    printf("You entered:%s\n",str);
    return 0;
}

输出
Enter the string:-1081426336-1081426336-1081426336You entered:wefwq

str和&str[0]可以理解,但是为什么str和&str效果是一样的呢?


str是代表数组的首地址。
&str是行指针,此时的类型发生了变化,即 char (*str)[]


&str是行指针,类型发生了变化。所以效果一样


  1. &str[0]表示数组首元素的地址;
  2. str表示数组首元素的地址;
  3. &str表示数组的首地址;

这两个地址的指向的内存是同一个地方,当你以%d输出时,取出的内容就是(地址)~(地址+偏移)这一片内存中的内容。所以输出效果是一样的。
C中有很多细节需要了解C编译器怎么解释的,要细细品味。


这是指针的一个特殊情况:

编译器会将数组名当作数组首元素的地址


两个指针代表的含义不一样,可以通过sizeof(XX)来判断指针代表的意义

【热门文章】
【热门文章】