C 如何正确初始化指针

C 如何正确初始化指针,c,visual-studio-2010,function,pointers,C,Visual Studio 2010,Function,Pointers,我有以下调用函数uint32_pack的代码。此程序在Dev-C++中编译时没有错误,但当“tag”是偶数时,不会生成正确的结果。在VisualStudio中,程序进行编译,但会产生错误,我猜这些错误就是为什么当“tag”为偶数时我无法获得正确输出的原因。我仍在试图让我的头脑绕过指针,我不确定我在声明指针时哪里出错了。谢谢你的帮助 以下是错误产生的代码: 1 int uint32_pack (uint8_t *fieldnumber, uint32_t value, uint8_t *out

我有以下调用函数uint32_pack的代码。此程序在Dev-C++中编译时没有错误,但当“tag”是偶数时,不会生成正确的结果。在VisualStudio中,程序进行编译,但会产生错误,我猜这些错误就是为什么当“tag”为偶数时我无法获得正确输出的原因。我仍在试图让我的头脑绕过指针,我不确定我在声明指针时哪里出错了。谢谢你的帮助

以下是错误产生的代码:

 1  int uint32_pack (uint8_t *fieldnumber, uint32_t value, uint8_t *out);
 2  int main(){
 3  uint32_t initvalue = 2;
 4  int return_rv;  
 5  uint8_t *tag = (uint8_t *) malloc(sizeof(uint8_t));
 6  *tag = 38;
 7  uint8_t *tempout= (uint8_t *) malloc(30);
 8  return_rv = uint32_pack (tag, initvalue, tempout);
 9  free(tempout);
10  free(tag);
11  }
VS的误差如下所示:

error C2143: syntax error : missing ';' before 'type' (on line 7)
error C2065: 'tempout' : undeclared identifier        (on line 8)
warning C4047: 'function' : 'unsigned char *' differs in levels of indirection from 'int' (on line 8)
warning C4024: 'uint32_pack' : different types for formal and actual parameter 3 (on line 8) 
error C2065: 'tempout' : undeclared identifier  (on line 9)
warning C4022: 'free' : pointer mismatch for actual parameter 1 (on line 9)

最后三个错误是第二个错误的后果,第二个错误是第一个错误的后果。这只剩下第一个和第三个无法解释

第一个错误是因为你使用的是C89而不是C++或C99;不能在C89中的代码之后声明变量


把第6行和第7行的顺序颠倒过来,你可能就没事了。(我认为第三个错误也是第一个错误的结果,但这不是决定性的。)

这里可能有几个不同的问题。除非您有一个声明这些整数类型的自定义头,否则将在标准头
stdint.h
中声明类型。Visual Studio没有附带此标题,因此它不知道这些类型是什么。如果您在谷歌上搜索stdint.h,您可以找到它的实现


如果您的文件具有
.c
扩展名,则默认情况下Visual Studio将其编译为c文件。此外,它不支持C99语法,因此不能在可执行代码中声明变量。要么将所有声明移到函数的开始PF,要么强制VS编译文件为C++。要执行后一种操作,请重命名文件,或者在文件属性中有一个选项允许您执行此操作。

看起来您可能正在编译为C代码,而且由于MSVC不支持C99,因此不允许您混合声明和代码。将其编译为C++代码(重命名为.CPP或使用Irc<代码> /tp> /Copy>标志),看看它是否修复了它。如果您需要有关uint32_-pack函数的帮助,您需要将其包含在问题中。看起来您是对的。你为什么不把它作为答案发出去?@negeo当你在发的时候-为什么,哦为什么,你只发一个字节?