另一个 "initialization makes integer from pointer without a cast" 错误我不明白

another "initialization makes integer from pointer without a cast" error i didnt understand

此代码应该打印 valuesa 以及使用变量和指针名称和地址的变量地址。我收到此 initialization makes integer from pointer without a cast 错误。


#include <stdio.h>      
    
int main() {

    int m = 300;
    double fx = 300.6006;
    char z = "c";

    printf("%d\n %lf\n %c\n", m, fx, z);
    printf("%p\n %p\n %p\n", &m, &fx, &z);  

    int* ptr_m = &m;
    double* ptr_fx = &fx;
    char* ptr_z = &z;

    printf("%d\n %lf\n %c\n", *ptr_m, *ptr_fx, *ptr_z);
    printf("%p\n %p\n %p\n", &ptr_m, &ptr_fx, &ptr_z);

    return 0;
}

你能帮我解决这个问题吗?

替换:

char z = "c";

char z = 'c';

"c" 是数组类型 char[2] 的字符文字。它在内存中表示为数组 { 'c', '[=19=]' }。用作初始化表达式时,它被隐式转换为指向其类型 char * 的第一个元素的指针。所以在这个声明中

char z = "c";

相当于声明

char z = &"c"[0];

您正在尝试使用 char * 类型的指针初始化类型 char 的对象 z。您需要使用整数字符常量而不是字符串文字,例如

char z = 'c';

在这样的 printf 调用中

printf("%d\n %lf\n %c\n", m, fx, z);

这种格式 %lf 中的长度修饰符 l 是多余的,没有任何作用。你可以写

printf("%d\n %f\n %c\n", m, fx, z);

你还应该在 printf 的调用中将指针转换为 void * 类型

printf("%p\n %p\n %p\n", ( void * )&m, ( void * )&fx, ( void * )&z);

似乎不​​是 printf

的这个调用
printf("%p\n %p\n %p\n", &ptr_m, &ptr_fx, &ptr_z);

你是说这个电话

printf("%p\n %p\n %p\n", ( void * )ptr_m, ( void * )ptr_fx, ( void *)ptr_z);