另一个 "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);
此代码应该打印 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);