字符串和指针的问题

时间:2011-04-20 15:04:37

标签: c string pointers

有人可以告诉我为什么这个程序不起作用吗?

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

它正在发挥作用。

6 个答案:

答案 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 numchar *num之间存在差异。你必须先阅读有关指针的内容。它们与正常变量不同,必须非常小心地使用。