使用 C 格式的 Printf 打印指针数据



我的理解是,当你声明一个指针时,比如说int *a = 5a是指针,*a是int指向的 - 所以*表示你正在访问指针数据。(&正在访问该地址)。希望这是正确的?

为什么当我做printf它似乎没有按照我想要的方式工作?

int main()
{
    int *a = 5;
    printf("%dn",a);
    return 0;
}

这给了我正确的结果,这是我没想到的。当我在 printf 中*a而不是a时,它失败了,我很困惑?

不,int *a = 5;不会将5int值存储到a指向的内存位置,内存位置本身是5的(这大多是无效的)。这是一个初始化语句,它初始化类型为 int *(指向 5 的指针)的变量a

为了便于理解,请考虑以下有效案例

int var = 10;
int *ptrVar = &var;

在这里,ptrVar被分配了 &var 的值,即指针。因此,换句话说,ptrVar指向一个保存int的内存位置,并且在取消引用ptrVar时,我们将获得该int值。

也就是说,总的来说,

  printf("%dn",a);

是对未定义行为的邀请,因为您要将指针类型作为参数传递给%d格式说明符。

声明

int *a确实声明a是一个指针。因此,宣言

int *a = 5;

使用值 5 初始化a。就像如何

int i = 5;

将使用值 5 初始化i

在极少数情况下,您希望使用文本值(0 或 NULL 除外)初始化指针变量。这些可能是嵌入式(或其他深奥的)应用程序,其中某些地址在特定平台上具有定义的含义。

最新更新