有人可以告诉我为什么这个程序不起作用吗?
int main()
{
char *num = 'h';
printf("%c", num);
return 0;
}
我得到的错误是:
1>c:\users\\documents\visual studio 2010\projects\sssdsdsds\sssdsdsds\sssdsdsds.cpp(4): error C2440: 'initializing' : cannot convert from 'char' to 'char *'
但是,如果我写这样的代码:
int main()
{
char num = 'h';
printf("%c", num);
return 0;
}
它正在发挥作用。
答案 0 :(得分:5)
char *num = 'h';
此处,字母'h'
是char
,您尝试将其分配给char*
。这两种类型不一样,所以你得到了上面你看到的问题。
这样可行:
char *num = "h";
不同之处在于,您在使用双引号("
),这会创建char*
。
这也有效:
char letter = 'h';
char* ptrToLetter = &letter;
你应该阅读C中的指针,以准确理解这些不同结构的作用。
答案 1 :(得分:2)
char *
是指向char的指针,与单个char
不同。
如果您有char *
,则必须使用"
初始化,而不是'
。
另外,对于printf()
中的格式表示:
%s
用于char *
%c
仅适用于char
。答案 2 :(得分:0)
在第一种情况下,您将num声明为指向char的指针。在第二种情况下,您将其声明为char。在每种情况下,都为变量分配一个char。您不能将char指定给指向char的指针,因此会出错。
答案 3 :(得分:0)
'h'= Char “h”=空终止字符串
int main()
{
char *num = "h";
printf("%s", num); // <= here change c to s if you want to print out string
return 0;
}
这将起作用
答案 4 :(得分:0)
正如有人刚才所说,当你写作
char *num = 'h'
编译器会给你一个错误,因为你试图给指针一个值。您知道,指针只是存储您之前定义的另一个变量的内存地址的变量。但是,您可以使用操作员访问变量的内存地址:
&
变量的指针应该与指向的元素类型相同。 例如,以下是如何正确定义ptr:
int value = 5;
//defining a Ptr to value
int *ptr_value = &value;
//by now, ptr_value stores value's address
无论如何,你应该在某个地方学习这一切是如何工作的以及如何实现ptrs,如果你有其他问题尝试一个更具体的问题:)
答案 5 :(得分:0)
当您使用char *h
时,您正在声明指向char
变量的指针。该指针保持它指向的变量的地址。
简单来说,由于您只是将char变量声明为char num='h'
,因此变量num
将保留值h
,因此如果您使用printf("%c",num)
打印它,您将获得h
的输出。
但是,如果将变量声明为指针,如char *num
,那么它实际上不能保存任何字符值。我只能保留一些字符变量的地址。
例如,请查看以下代码
void main()
{
char a='h';
char *b;
b=&a;
printf("%c",a);
printf("%c",b);
printf("%u",b);
}
这里,我们有一个char变量a
和一个char指针b
。现在变量a
可能位于我们不知道的内存中。 a
保留值h
,&a
表示address of a in memory
语句b=&a
会将a
的内存地址分配给b
。由于b
被声明为指针,因此它可以保存地址。
州政府printf("%c",b)
将打印出垃圾值。
语句printf("%u",b)
将在内存中打印变量a
的地址。
因此char num
和char *num
之间存在差异。你必须先阅读有关指针的内容。它们与正常变量不同,必须非常小心地使用。