我没有做太多关于指针的工作,所以这整件事对我来说有点新鲜——如果我遗漏了一些明显的东西,请原谅我。我要做的是将不同类型的变量保存到uint16_t指针中。我的指针是这样的:
CCD_ 1。
我可以使用char或float指针,但我的目标是了解如何将不同类型的变量保存到整数指针中,然后通过操作内存进行读回。我保存了一个像这样的char变量:*(ptr) = ("X"); *(ptr + 1) = "P";
和一个像下面这样的double变量:*(ptr + 2) = (float)M_PI;
。
当我试图将*(ptr(处的值打印为char时,我确实得到了一个char,但它不是X(我得到了T(。试着打印浮点数给了我0.00000。
我还没有找到任何涉及这个问题的有用主题,如果有人能向我解释这些信息的存储和检索,我将非常高兴。谢谢!
当我试图将*(ptr(处的值打印为char时,我确实得到了一个char,但它不是X(我得到了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中。(假设操作系统上浮动32位(
- (uint16_t*(malloc(6*sizeof(uint16-t((
不要施放malloc(MikeCAT(
通过将变量重新组合到一个结构中,在不面临未定义行为或引发问题的情况下,找到实现您所需的方法:
#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 %fn", ptr->c, ptr->b, ptr->f);
}
使用gcc测试编译。c-lm&/a.out