gpt4 book ai didi

你能向我解释一下两个程序之间的区别吗?

转载 作者:行者123 更新时间:2023-11-30 20:15:45 25 4
gpt4 key购买 nike

查看内存分配的程序

#include<stdio.h>

main()
{
char *p;
printf("the address of p is = %u\n",p);
}

有什么区别

#include<stdio.h>

main()
{
char *p;
printf("the address of p is = %u\n",&p);
}

最佳答案

第一个程序打印未初始化指针 p 的值,解释为无符号整数。由于指针未初始化,因此打印的值是该位置中恰好存在的任何值。第二个程序打印解释为无符号整数的指针 p 的地址。虽然在技术上不合法,但它适用于 sizeof(char *) == sizeof(unsigned int) 的大多数系统。由于变量“p”是一个自动变量,您将在运行时分配给 C 堆栈的地址范围内获得一个值。

编辑:从评论中澄清。 Printf 根据控制字符串格式化参数中传递给它的数据。 %u 表示打印无符号整数。因此,当您传入 p 时,C 会将指针变量的值传递给 printf。传入的字节数取决于该平台的 sizeof(pointer)。 printf 通常仅在控制字符串之后作为参数传入的数据类型与控制字符串中的所有 % 指令匹配时才“起作用”。但在 sizeof(onetype) == sizeof(another-type) 的情况下,我写的是正确的: printf 会将特定参数位置中的位解释为控制字符串中相应位置中指定的类型。当 sizeof(pointer) == sizeof(unsigned int) 时,您将得到作为 unsigned int 打印出来的指针值。

关于你能向我解释一下两个程序之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com