【发布时间】:2021-09-01 15:04:41
【问题描述】:
#include<stdio.h>
struct Book {
char * name;
int page;
};
void demo(struct Book bookArr[]);
int main(){
struct Book bookArr[] = {{"c struct",1},{"c struct",2}};
printf("bookArr address from main: %p\n",&bookArr);
printf("bookArr[0] address from main: %p\n",&bookArr[0]);
demo(bookArr);
return 0;
}
void demo(struct Book bookArr[]){
printf("bookArr address from demo: %p\n",&bookArr);
printf("bookArr[0] address from demo: %p\n",&bookArr[0]);
}
The output:
bookArr address from main: 0x1040bb350
bookArr[0] address from main: 0x1040bb350
bookArr address from demo: 0x1040bb328
bookArr[0] address from demo: 0x1040bb350
Program ended with exit code: 0
demo 中的 bookArr 在启动时复制 main 中的 bookArr,所以我可以理解为什么两个函数的 bookArr 地址不同,但我不明白为什么两个函数的 bookArr[0] 地址相同。演示不是已经分配了完整的 BookKarr 吗? bookArr[0] 和 bookArr[1] 都是指针吗?但事实并非如此
【问题讨论】:
-
我没明白这个问题是什么“bookArr[0] 和 bookArr[1] 都是指针?”什么意思?
-
不明白为什么这两个函数的bookArr[0]地址是一样的。
标签: arrays c pointers pass-by-reference implicit-conversion