c程序无符号整数或uint8\t

c程序无符号整数或uint8\t,c,variables,types,C,Variables,Types,我正在编写一个名为take\u picture()的函数。该功能将使相机拍摄照片并将数据存储在阵列中 我希望函数返回数组所在的地址并返回数组的大小 这是我的函数声明: uint8_t * take_picture(int *piclength) 我的问题是函数返回类型和参数的正确/逻辑数据类型是什么?考虑到它们存储了一个数组的地址和大小?uint8\u t和int有意义吗 谢谢无符号整数大小;//因为图像大小始终为正且较大 uintptr\u t地址;//如果这在stdint.h中可用 或 无

我正在编写一个名为
take\u picture()
的函数。该功能将使相机拍摄照片并将数据存储在阵列中

我希望函数返回数组所在的地址并返回数组的大小

这是我的函数声明:

uint8_t * take_picture(int *piclength)
我的问题是函数返回类型和参数的正确/逻辑数据类型是什么?考虑到它们存储了一个数组的地址和大小?
uint8\u t
int
有意义吗


谢谢

无符号整数大小;//因为图像大小始终为正且较大

uintptr\u t地址;//如果这在stdint.h中可用

无符号整数地址//它能够存储指针大小

地址=拍摄照片(大小和尺寸)//如果返回uintptr,请拍照

如果您不知道take_picture返回的是什么,那么您可以像您所做的那样投射它:


地址=(无符号*int)拍照(&size)

无符号整数大小;//因为图像大小始终为正且较大

uintptr\u t地址;//如果这在stdint.h中可用

无符号整数地址//它能够存储指针大小

地址=拍摄照片(大小和尺寸)//如果返回uintptr,请拍照

如果您不知道take_picture返回的是什么,那么您可以像您所做的那样投射它:

地址=(无符号*int)拍照(&size)

我的问题是函数返回类型和参数的正确/逻辑数据类型是什么?考虑到它们存储了一个数组的地址和大小

函数返回类型应该是指向数组项的指针。如果它是
uint8\u t
的数组,则返回类型应为
uint8\u t*
。这也是字节数组(“原始数据”)最正确/最安全的类型

用于描述数组大小的最正确的类型是
size\u t
,这是一种专门用于此目的的无符号整数类型,可移植性保证足够大以容纳给定系统的数组大小

uint8_t* take_picture (size_t* piclength);
或者

void take_picture (uint8_t* picture, size_t* piclength);
我的问题是函数返回类型和参数的正确/逻辑数据类型是什么?考虑到它们存储了一个数组的地址和大小

函数返回类型应该是指向数组项的指针。如果它是
uint8\u t
的数组,则返回类型应为
uint8\u t*
。这也是字节数组(“原始数据”)最正确/最安全的类型

用于描述数组大小的最正确的类型是
size\u t
,这是一种专门用于此目的的无符号整数类型,可移植性保证足够大以容纳给定系统的数组大小

uint8_t* take_picture (size_t* piclength);
或者

void take_picture (uint8_t* picture, size_t* piclength);

尝试
int size=0;uint8\u t*地址=拍摄照片(大小)
如果要将指针转换为整数(顺便说一句,为什么?),其类型应为
uintpttr\u t
@EugeneSh。在一些合法的情况下,这是有用的,例如,将它从JNI传递到Java类方法和传递到JNI。如果不理解,请不要使用强制转换。你为什么不使用正确的类型?您的代码调用未定义的行为。您为什么会故意选择使用与函数声明不一致的数据类型?强制转换有时是合适的,但它们往往是你做错了事情的标志;uint8\u t*地址=拍摄照片(大小)如果要将指针转换为整数(顺便说一句,为什么?),其类型应为
uintpttr\u t
@EugeneSh。在一些合法的情况下,这是有用的,例如,将它从JNI传递到Java类方法和传递到JNI。如果不理解,请不要使用强制转换。你为什么不使用正确的类型?您的代码调用未定义的行为。您为什么会故意选择使用与函数声明不一致的数据类型?强制转换有时是合适的,但它们往往是你做错了什么的标志。我认为第二个应该使用
uint8\u t**
而不是
uint8\u t*
,这样
*picture
将指向分配的任何内容。@Kevin函数的作用并不明显。“该功能将使相机拍摄照片并将数据存储在阵列中”可能意味着什么。如果这是一个选项,最好将分配留给调用者。我认为第二个应该采用
uint8\u t**
而不是
uint8\u t*
,这样
*picture
将指向分配的内容。@Kevin函数的作用并不明显。“该功能将使相机拍摄照片并将数据存储在阵列中”可能意味着什么。如果是选项,最好将分配留给调用方//它能够存储指针大小。不,不是。这可能适用于较旧的体系结构。这将在未来失败。切勿尝试将指针值放入
int
无符号int地址//它能够存储指针大小。不,不是。这可能适用于较旧的体系结构。这将在未来失败。切勿尝试将指针值放入
int