2011-04-20 54 views
1

有人可以告诉我为什么这个程序不起作用吗?字符串和指针问题

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; 
} 

它的工作。

+2

为什么你会期望*它的工作?你认为'*'是什么意思,你为什么认为把它放在那里并不重要? – 2011-04-20 15:22:37

回答

0

在第一种情况下,您将num声明为指向char的指针。在第二种情况下,您将其声明为char。在每种情况下,您都将一个char分配给变量。你不能指定一个字符指向一个字符,因此错误。

0

'H'=字符 “H”= NULL结尾的字符串

int main() 
{ 
    char *num = "h"; 
    printf("%s", num); // <= here change c to s if you want to print out string 
    return 0; 
} 

这将工作

5
char *num = 'h'; 

这里,信'h'char,您正在尝试将分配给一个char*。这两种类型是不一样的,所以你会遇到你在上面看到的问题。

这会工作:

char *num = "h"; 

不同的是,在这里,你正在使用双引号("),它创建了一个char*

这也将工作:

char letter = 'h'; 
char* ptrToLetter = &letter; 

你应该在C指针读取多达准确了解这些不同的结构做。

2

char *是一个指向char的指针,与单个的char不同。

如果您有char *,那么您必须用"进行初始化,而不是用'进行初始化。

并且还用于在printf()格式表示:

  • %s用于char *
  • %c仅用于char
0

正如有人刚才说的,当你写

char *num = 'h' 

编译器,因为你想给一个指针的值给你一个错误。你知道,指针只是只存储你之前定义的另一个变量的内存地址的变量。但是,您可以访问到一个变量的内存地址与运营商:

& 

和可变的指针应在同类型指向的元素来coerent。 例如,这里是你应该如何正确定义一个PTR:

int value = 5; 

//defining a Ptr to value 

int *ptr_value = &value; 

//by now, ptr_value stores value's address 

无论如何,你应该学习的地方怎么这一切工作以及如何师生比来实现,如果您有其他问题,请尝试一个更具体的问题:)

0

当您使用char *h,您声明一个指向一个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和一个字符指针b。现在变量a可位于内存中,我们不知道的地方。 a保存值h&a表示address of a in memory语句b=&a将分配内存地址ab。由于b被声明为指针,它可以保存地址。

的statenment printf("%c",b)将打印出的垃圾值。

声明printf("%u",b)将打印内存中的变量a的地址。

所以有char numchar *num之间的差异。你必须先阅读指针。它们与正常变量不同,必须非常小心使用。