指针作为C ++中的参数

时间:2013-06-13 23:11:52

标签: c++ pointers

我是C ++的新手,主要是使用Java,而我正在尝试编写一个函数问题。我确信这很简单,但是,它给了我适合,所以准备一个痛苦的新手问题。

我正在尝试编写如下函数:

void foo(u_char *ct){

/* ct is a counter variable, 
it must be written this way due to the library 
I need to use keeping it as an arbitrary user argument*/

/*here I would just like to convert the u_char to an int, 
print and increment it for each call to foo, 
the code sample I'm working from attempts to do it more or less as follows:*/

int *counter = (int *) ct;
printf("Count: %d\n", *counter);
*counter++;

return;

}

当我尝试在XCode中运行它时(我也不习惯使用它),我在foo的printf()部分得到一个EXE_BAD_ACCESS异常。我真的不确定这里发生了什么,但我怀疑它与汇总值,指针和引用有关,我还不知道C ++如何理解它们来自Java。有谁看到我在这里滑倒的地方?

感谢。

2 个答案:

答案 0 :(得分:4)

u_char将在内存中为1个字节(名称表明它只是一个无符号字符),int通常为4个字节。在printf中,您告诉运行时从int所在的地址读取counter(4个字节)。但是你只有1个字节。

答案 1 :(得分:0)

编辑(基于这里的评论,海报说它实际上是用int的地址调用的:foo((u_char*)&count)):

void foo(u_char *ct)
{
   int *pcounter = (int *)ct;  // change pointer back to an int *
   printf("Count: %d\n", *pcounter);
   (*pcounter)++;  // <<-- brackets here because of operator precedence.
}

甚至更短(除了新手喜欢这种语言之外的狂野的c风格):

void foo(u_char *ct)
{
   printf("Count: %d\n", (*(int *)ct)++);
}