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

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

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

#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”表示:

#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;
}

 

结构体名字代表什么?

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

例如:

int age;

类比:

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

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

尝试打印age的地址:

#include <stdio.h>

struct person {

};

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

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

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

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

发表评论

邮箱地址不会被公开。