char *ptr = malloc(sizeof(char));
printf("\nValue of ptr: %d\n",ptr);
printf("\nValue of address of ptr: %x\n",&ptr);
printf("\nValue of pointed by ptr: %c\n",*ptr);
printf("\nValue of address pointed by ptr: %x\n",&(*ptr));
*ptr='u';
 printf("\nValue of pointed by ptr: %c\n",*ptr);
printf("\nValue of address pointed by ptr: %x\n",&(*ptr));

在上面的代码中,收到以下输出:

Value of ptr: 1046113600
Value of address of ptr: a2fffa78
Value of pointed by ptr: P
Value of address pointed by ptr: 3e5a6d40
Value of pointed by ptr: u
Value of address pointed by ptr: 3e5a6d40

这是否意味着具有单个字符大小的Malloc的缺省值是P?

已try 使用Malloc分配单个字符大小的内存,并初始化了指向已分配内存的指针.已try 打印分配的内存值.

推荐答案

malloc在不进行初始化的情况下分配内存.因此,分配的内存可以包含任何位值集.这两个缺省值都不使用.

与Malloc相反,您可以使用将所分配的内存初始化为零的另一分配功能calloc,例如

char *ptr = calloc(1, sizeof(char));

需要注意的是,这种对print tf的调用可以输出如下指针的值

printf("\nValue of ptr: %d\n",ptr);
printf("\nValue of address of ptr: %x\n",&ptr);

是无效的,并且具有未定义的行为.具体地,例如,转换说明符d被设计成输出类型intsizeof( int )的整数可以等于4,而sizeof( char * )可以等于8.

来自C标准(7.21.6.1 fprint tf函数)

9如果转换规范无效,则行为为 未定义.275)如果任何参数不是 对应的转换规范,行为是未定义的.

您应该使用带有指针的转换说明符p,例如

printf("\nValue of ptr: %p\n", ( void * )ptr);

或在标题<inttypes.h>中定义的转换说明符

#include <inttypes.h>

//...

printf("\nValue of ptr: %" PRIdPTR "\n", ( intptr_t )( void * )ptr);

C++相关问答推荐

rSP堆栈指针在返回函数调用的值时有任何用途吗?

与unions 的未定义行为

如果实际的syscall是CLONE(),那么为什么strace接受fork()呢?

编译SDL 2时缺少SDL_ttf

C/SDL程序,渲染不使用我的渲染器

为什么双重打印与C中的float具有不同的大小时具有相同的值?

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

如何使用C for Linux和Windows的标准输入与gdb/mi进行通信?

使用错误的命令执行程序

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

S在本文中的价值观到底出了什么问题?

MacOS下C++的无阻塞键盘阅读

我正在try 将QSORT算法实现为C++中的泛型函数

为什么我的二叉树删除删除整个左部分的树?

与外部SPI闪存通信时是否应禁用中断?

正在try 理解C++中的`正在释放的指针未被分配‘错误

如何解释数组中的*(ptr)和*(ptr+2)?

全局变量 y0 与 mathlib 冲突,无法编译最小的 C 代码

定义 int a = 0, b = a++, c = a++;在 C 中定义了行为吗?

Codewars Kata 掷骰子的不稳定行为