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