在下面的代码中,get_pic()
返回指针uint8_t type
。
然后在main()
中调用get_pic()
,并将其返回值强制转换为变量address
unsigned int
。
get_pic()
返回的指针指向一个全局数组,该数组最终位于地址a8000f80
。
我的问题是地址a8000f80
是32位数。因此,get_pic()
返回的指针如何指向此地址,因为它只是8位的uint8_t
类型?
//Function declaration
uint8_t* get_pic(int *piclen);
main() {
unsigned int address, value;
address = (unsigned int) get_pic((int*)& value);
}
答案 0 :(得分:2)
uint8_t
无法指向任何地方,因为它不是指针。但是uint_8*
(指向uint8_t
的指针)可以。
你可能想要这个:
uint8_t* get_pic(int *piclen);
main() {
uint8_t *address;
int value;
address = get_pic(&value);
}
get_pic
会向uint8_t *
返回uint8_t
,即指针,因此address
的类型应为uint8_t *
传递给getpic
的参数是指向int
(int*
)的类型指针,因此value
也应该是int*
类型。
答案 1 :(得分:1)
它将指针返回到类型为uint8_t
的值;这对指针本身的 size 没有任何说明。
答案 2 :(得分:-1)
指针的大小与对象的大小无关,它指向。所以,事实上,对于大多数(也就是几乎所有)实现,sizeof($anything *)
是常量(对于任何$anything
不是函数)。
所以sizeof(uint8_t _*) == sizeof(uint32_t *) == sizeof(unsigned int *) == sizeof(struct foo *)
。
uint8_t * get_pic(int * piclen);
这将返回指向某些数据的指针。如果该数据为uint32_t
,则将其保存为uint32_t *
,C中不需要强制转换(但编译器可能会发出警告):
int len;
uint32_t * address = get_pic(&len);
然后,您可以使用标准语法访问它。
另请注意Michael Walzs的答案,他与我并行写作;)