结构体名是不是结构体的首地址?

首先回答,是。具体请往下看:

数组名是数组第一个元素的地址

  1. #include <stdio.h>
  2. int main(void) {
  3. int arr[5] = {1, 2, 3, 4, 5};
  4. printf("数组名的地址:%p\n", arr);
  5. printf("数组第一个元素的地址:%p\n", &arr[0]);
  6. return 0;
  7. }
#include <stdio.h>

int main(void) {
    int arr[5] = {1, 2, 3, 4, 5};
    printf("数组名的地址:%p\n", arr);
    printf("数组第一个元素的地址:%p\n", &arr[0]);
    return 0;
}

所以,arr[1]也可以用指针的形式“*arr+1”表示:

  1. #include <stdio.h>
  2. int main(void) {
  3. int arr[5] = {1, 2, 3, 4, 5};
  4. printf("第一个元素:%d\n", arr[1]);
  5. printf("第一个元素:%d\n", *arr+1);
  6. return 0;
  7. }
#include <stdio.h>

int main(void) {
    int arr[5] = {1, 2, 3, 4, 5};
    printf("第一个元素:%d\n", arr[1]);
    printf("第一个元素:%d\n", *arr+1);
    return 0;
}

 

结构体名字代表什么?

结构体类型是用户自定义的数据类型:

例如:

  1. int age;
int age;

类比:

  1. struct person age;
  2. //struct person 相当于 int ,age 相当于 age。
  3. //struct person 就是用户自定义的数据类型
struct person age;
//struct person 相当于 int ,age 相当于 age。
//struct person 就是用户自定义的数据类型

如果我们用刚才创建的结构体类型struct person,声明并且定义一个变量age。

尝试打印age的地址:

  1. #include <stdio.h>
  2. struct person {
  3. };
  4. int main(void) {
  5. struct person age;
  6. printf("%p\n", &age);
  7. return 0;
  8. }
#include <stdio.h>

struct person {

};

int main(void) {
    struct person age;
    printf("%p\n", &age);
    return 0;
}

这个地址代表什么呢?是否会存放一个变量什么的?

下面,我们在结构体内部定义一个变量:

  1. #include <stdio.h>
  2. struct person {
  3. int a;
  4. };
  5. int main(void) {
  6. struct person age;
  7. printf("%p\n", &age);
  8. printf("%p\n", &age.a);
  9. return 0;
  10. }
#include <stdio.h>

struct person {
    int a;
};

int main(void) {
    struct person age;
    printf("%p\n", &age);
    printf("%p\n", &age.a);
    return 0;
}

两个地址是相同的。这也就意味着:结构体名存放的是结构体内成员的第一个元素的首地址。

作者: 高志远

高志远,24岁,男生

《结构体名是不是结构体的首地址?》有4条评论

  1. 兄弟,你这篇文章错误点有点多。。
    #include
    int main(void) {
    int arr[5] = {1, 2, 3, 4, 5};
    printf(“第一个元素:%d\n”, arr[1]);
    printf(“第一个元素:%d\n”, *arr+1); ——————–应该是*(arr+1)
    return 0;
    }

    ———————->
    #include
    struct person {
    int a;
    };
    int main(void) {
    struct person age;
    printf(“%p\n”, &age);
    printf(“%p\n”, &age.a);
    return 0;
    }—————这个从哪里得出(结构体名存放的是结构体内成员的第一个元素的首地址),你都对结构体名取地址了。

    1. 不好意思,最近才看到回帖。回想了下是有些问题。
      对于数组来说,直接打印数组名就是首元素地址(即不用取地址);对于结构体来说,结构体名取地址后才是首元素地址(即结构体名不是结构体首元素的地址)。

发表评论

邮箱地址不会被公开。