-2

1)

int *ptr;
ptr = malloc(10 * sizeof (*ptr)); 

关于sizeof(*ptr),*ptr是 deferencing ptr- 它是 ? 所指向的值ptr?那么sizeof(*ptr)等于 ? 所指向的总内存大小ptr

2)

void *print_message_function( void *ptr )
{ 
  char *message;
  message = (char *) ptr;
  printf("%s \n", message);
}

问题 2, void* print_message_function期望返回类型为void* or 的东西,但下面的函数没有返回任何东西。

4

3 回答 3

0
  1. 问问自己变量*ptr是什么?提示,它在第一行。

  2. 这实际上不是一个问题。但是,如果你问它是否错了,那就不是真的。但是,如果您尝试使用返回值,您可能会遇到麻烦。

有趣的是,该标准仍然允许不从明确打算返回一个的函数返回显式值。状态条款6.8.6.4 The return statement /1C11

带有表达式的 return 语句不应出现在返回类型为 void 的函数中。没有表达式的 return 语句只能出现在返回类型为 void 的函数中。

这仅说明语句的特定形式return可能不是。它没有说明显式return语句必须存在于非 void 函数中。

于 2013-05-27T00:48:56.773 回答
0

Question1, sizeof(*ptr), *ptr=deferencing,ptr指向的值?

不,由 ptr 本身。例如,内存int x = 123,*ptr = &x; *x =中的地址123

sizeof(*ptr)=ptr 指向的总内存大小?

它是指针的大小,只是一个整数值;即,一个int. 因此,安德斯的大小是sizeof(int)

问题 2,void* print_message_function 期望返回类型为 void* 或其他类型,但下面的函数没有返回任何内容。

为什么要这样做?我不确切知道 C std 对此有何评论,但调用者可能会访问垃圾值。不要混淆它们之间voidvoid*很大的不同。

于 2013-05-27T00:49:30.863 回答
-1
  1. 任何 sizeof() 都是编译时间常数。如果编译器无法确定它的值 - 这将是编译时错误。取消引用不是一种选择。
  2. 没有问任何问题。无论如何 - 这很糟糕,它应该发出编译器警告,如果有人试图使用这个返回值,那就太糟糕了。
于 2013-05-27T04:08:46.650 回答