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 forchar *
- the
%c
is only forchar
.
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.
精彩评论