使用无符号短指针存储和访问不同数据类型
Storing and accessing different data types with unsigned short pointer
我没有用指针做太多工作,所以这整件事对我来说有点新鲜 - 如果我遗漏了一些明显的东西,请原谅我。我要做的是将不同类型的变量保存到 uint16_t 指针中。
我的指针是这样的:
uint16_t* ptr = (uint16_t*) malloc(6 * sizeof(uint16_t));
.
我可以使用 char 或 float 指针,但我的目标是了解如何将不同类型的变量保存到整数指针中,然后通过操作内存读回。我保存了一个像这样的 char 变量: *(ptr) = ("X"); *(ptr + 1) = "P";
和一个像这样的 double 变量:*(ptr + 2) = (float)M_PI;
.
当我尝试将 *(ptr) 处的值打印为字符时,我确实得到了一个字符,但它不是 X(我得到的是 T)。尝试打印浮点数给我 0.00000。
我没有找到涵盖此问题的任何有用主题,如果有人可以向我解释存储和检索此信息,我将非常高兴。谢谢!
When I try to print the value at *(ptr) as a char, I do get a char, but it is not X (I get T).
你的代码有几个问题
*(ptr) = ("X"); *(ptr + 1) = "P";
应该写成:
*(ptr) = 'X'; (no need for bracket)
*(ptr + 1) = 'S'; // also for 'S'
在 C 中," 用于字符串,' 用于单个字符
*(ptr + 2) = (float)M_PI;
您正在尝试将 4 个字节装入一个只能包含 2 个字节的 ptr。(假设您的 OS 上有 32 位浮点数)
- (uint16_t*) malloc(6 * sizeof(uint16_t));
Don't cast malloc (麦克猫)
通过将您的变量重新组合到一个结构中,找到实现您想要的目标的方法,而不会遇到未定义的行为或转换问题:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
typedef struct mystruct {
float f;
char c;
char b;
} t_mystruct;
void main ()
{
t_mystruct *ptr = malloc(sizeof(t_mystruct));
ptr->c = 'X';
ptr->b = 'S';
ptr->f = (float)M_PI;
printf("%c %c %f\n", ptr->c, ptr->b, ptr->f);
}
用 gcc 编译 test.c -lm && ./a.out
我没有用指针做太多工作,所以这整件事对我来说有点新鲜 - 如果我遗漏了一些明显的东西,请原谅我。我要做的是将不同类型的变量保存到 uint16_t 指针中。 我的指针是这样的:
uint16_t* ptr = (uint16_t*) malloc(6 * sizeof(uint16_t));
.
我可以使用 char 或 float 指针,但我的目标是了解如何将不同类型的变量保存到整数指针中,然后通过操作内存读回。我保存了一个像这样的 char 变量: *(ptr) = ("X"); *(ptr + 1) = "P";
和一个像这样的 double 变量:*(ptr + 2) = (float)M_PI;
.
当我尝试将 *(ptr) 处的值打印为字符时,我确实得到了一个字符,但它不是 X(我得到的是 T)。尝试打印浮点数给我 0.00000。
我没有找到涵盖此问题的任何有用主题,如果有人可以向我解释存储和检索此信息,我将非常高兴。谢谢!
When I try to print the value at *(ptr) as a char, I do get a char, but it is not X (I get T).
你的代码有几个问题
*(ptr) = ("X"); *(ptr + 1) = "P";
应该写成:
*(ptr) = 'X'; (no need for bracket)
*(ptr + 1) = 'S'; // also for 'S'
在 C 中," 用于字符串,' 用于单个字符
*(ptr + 2) = (float)M_PI;
您正在尝试将 4 个字节装入一个只能包含 2 个字节的 ptr。(假设您的 OS 上有 32 位浮点数)
- (uint16_t*) malloc(6 * sizeof(uint16_t));
Don't cast malloc (麦克猫)
通过将您的变量重新组合到一个结构中,找到实现您想要的目标的方法,而不会遇到未定义的行为或转换问题:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
typedef struct mystruct {
float f;
char c;
char b;
} t_mystruct;
void main ()
{
t_mystruct *ptr = malloc(sizeof(t_mystruct));
ptr->c = 'X';
ptr->b = 'S';
ptr->f = (float)M_PI;
printf("%c %c %f\n", ptr->c, ptr->b, ptr->f);
}
用 gcc 编译 test.c -lm && ./a.out