为什么打印a时候 报错说参数不对的样子


#include <stdio.h>
int main()
{
    int *a = 11;
    printf(a);
    return 0;
}

为什么打印a时候 报错说参数不对的样子

printf(a);

->
printf("%p", a);

prinf是c语言的格式化输出函数,注意这个函数的使用,一般调用方式为printf("<格式化字符串>", <参量表>),你忘了前面的格式化参数字符串,比如int输出用%d 指针输出用%p

先看修改后的代码:

#include <stdio.h>
int main()
{
    int a = 11; // 指针类型错误,应该定义为int类型
    printf("%d", a); // printf函数参数类型错误,应该使用占位符格式化输出
    return 0;
}

首先,11是整型字面量,但你用了 int 指针类型定义a。
另外在使用printf函数输出a时,应该使用占位符格式化输出,而不是直接将变量名作为参数传递给printf函数。

1.现在定义的a是一个指针,给指针赋值代表的是给a这个指针一个9的地址。这里其实已经有问题了;
2、printf打印是格式化语句,printf(a),格式上也是错误的。

在这段代码中,您将一个整数值 11 赋值给指针变量 a,这是不合法的,因为指针变量需要存储一个内存地址,而不是一个整数值。因此,当您尝试使用 printf() 函数打印指针变量 a 时,会发生错误。

为了解决这个问题,您可以将指针变量 a 初始化为 NULL 或一个有效的内存地址,例如:

int *a = NULL; // 初始化为 NULL
int b = 11;
a = &b; // 初始化为变量 b 的地址
printf("%p", (void*)a); // 使用 %p 格式说明符打印指针变量 a

在上面的代码中,我们首先将指针变量 a 初始化为 NULL,然后将其赋值为变量 b 的地址。最后,我们使用 %p 格式说明符来打印指针变量 a 的值,并将其强制转换为 void* 类型。这样可以保证 printf() 函数正确地打印指针变量的值。