w33*_*haa 5 c printf pointers format-specifiers
为什么操作符 ( *) 需要访问int*变量的值而不是 for char*?
char *char_ptr;
int *int_ptr;
int mem_size = 50;
char_ptr = (char *) malloc(mem_size);
strcpy(char_ptr, "This is memory is located on the heap.");
printf("char_ptr (%p) --> '%s'\n", char_ptr, char_ptr);
int_ptr = (int *) malloc(12);
*int_ptr = 31337;
printf("int_ptr (%p) --> %d\n", int_ptr, *int_ptr);
Run Code Online (Sandbox Code Playgroud)
输出:
char_ptr (0x8742008) --> 'This is memory is located on the heap.'
int_ptr (0x8742040) --> 31337
Run Code Online (Sandbox Code Playgroud)
这是因为该方式printf的格式说明工作:%s格式要求,对于其对应的参数,一个指针到一个字符(更精确地说,一个地址nul封端的串-其可以是阵列char,与所分配的缓冲器中的至少其中有一个零字节,或字符串文字),因此您可以char_ptr按原样为其提供变量;另一方面,该%d格式需要一个整数(不是指向整数的指针),因此您必须int_ptr使用*运算符取消引用该变量。
关于良好编程风格的注意事项:如对您的问题的评论中所述,请务必free()在使用 分配的每个缓冲区上的某个时刻调用malloc,否则您将在代码中引入内存泄漏。另请参阅:我是否转换了 malloc 的结果?.