开发者

Issue with string and pointers

Can somebody tell me why this program does not work?

int main()
{
    char *num = 'h';
    printf("%c", num);
    return 0;
}

The error I get is:

1>c:\users\\documents\visual studio 2010\projects\sssdsdsds\sssdsdsds\sssdsdsds.cpp(4): error C开发者_如何学编程2440: 'initializing' : cannot convert from 'char' to 'char *'

But if I write the code like that:

int main()
{
    char num = 'h';
    printf("%c", num);
    return 0;
}

it's working.


char *num = 'h';

Here, the letter 'h' is a char, which you are trying to assign to a char*. The two types are not the same, so you get the problem that you see above.

This would work:

char *num = "h";

The difference is that here you're using double-quotes ("), which creates a char*.

This would also work:

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

You should read up on pointers in C to understand exactly what these different constructions do.


char * is a pointer to a char, not the same thing than a single char.

If you have char *, then you must initialize it with ", not with '.

And also, for the formatting representation in printf():

  • the %s is used for char *
  • the %c is only for char.


In thefirst case you declared num as a pointer to a char. In the second case, you declare it as a char. In each case, you assign a char to the variable. You can't assign a char to a pointer to a char, hence the error.


'h' = Char "h" = Null terminated String

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

this will work


As somebody just said, when you write

char *num = 'h'

The compiler gives you an error because you're trying to give to a pointer a value. Pointers, you know, are just variables that store only the memory address of another variable you defined before. However, you can access to a variable's memory address with the operator:

&

And a variable's pointer should be coerent in type with the element pointed. For example, here is how should you define correctly a ptr:

int value = 5;

//defining a Ptr to value

int *ptr_value = &value;

//by now, ptr_value stores value's address

Anyway, you should study somewhere how this all works and how can ptrs be implemented, if you have other problems try a more specific question :)


When you are using char *h, you are declaring a pointer to a char variable. This pointer keeps the address of the variable it points to.

In simple words, as you simply declare a char variable as char num='h', then the variable num will hold the value h and so if you print it using printf("%c",num), you will get the output as h.

But, if you declare a variable as a pointer, as char *num, then it cannot actually hold any character value. I can hold only the address of some character variable.

For example look at the code below

void main()
{
    char a='h';
    char *b;
    b=&a;
    printf("%c",a);
    printf("%c",b);
    printf("%u",b);
}

here , we have one char variable a and one char pointer b. Now the variable a may be located somewhere in memory that we do not know. a holds the value h and &a means address of a in memory The statement b=&a will assign the memory address of a to b. Since b is declared as a pointer, It can hold the address.

The statenment printf("%c",b) will print out garbage values.

The statement printf("%u",b) will print the address of variable a in memory.

so there's difference between char num and char *num. You must first read about pointers. They are different from normal variables and must be used very carefully.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜