首先回答,是。具体请往下看:
数组名是数组第一个元素的地址
#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;
}
- #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;
- }
#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;
}
- #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;
- }
#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;
- //struct person 相当于 int ,age 相当于 age。
- //struct person 就是用户自定义的数据类型
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 main(void) {
- struct person age;
- printf("%p\n", &age);
- return 0;
- }
#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;
}
- #include <stdio.h>
- struct person {
- int a;
- };
- int main(void) {
- struct person age;
- printf("%p\n", &age);
- printf("%p\n", &age.a);
- 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;
}

两个地址是相同的。这也就意味着:结构体名存放的是结构体内成员的第一个元素的首地址。
兄弟,你这篇文章错误点有点多。。
#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;
}—————这个从哪里得出(结构体名存放的是结构体内成员的第一个元素的首地址),你都对结构体名取地址了。
不好意思,最近才看到回帖。回想了下是有些问题。
对于数组来说,直接打印数组名就是首元素地址(即不用取地址);对于结构体来说,结构体名取地址后才是首元素地址(即结构体名不是结构体首元素的地址)。
我是明白什么意思了哈哈,只不过是打错字了,仅仅是表意有问题
嗯嗯,感谢指出问题,新年快乐