Sie drucken die Adresse, nicht den Wert.
printf("char is %c",*arr);
Versuchen Sie, dies durch einen Debugger laufen zu lassen, um zu verstehen, was passiert, und stellen Sie bitte eine echte Frage, z. B. was Ihrer Meinung nach passieren sollte, und was Sie stattdessen beobachten. Auf diese Weise werden Sie wahrscheinlich die meisten Ihrer Fragen selbst beantworten können.
Übrigens, einmal in print, arr ist eine lokale Variable, und sizeof als keine Möglichkeit, die Größe des ursprünglichen Arrays zu kennen, so sollte es drucken Größe ist 4. Der Code unten zeigt dieses Verhalten, und ein Unterschied zwischen Array und Zeiger, wenn es um sizeof kommt. Wenn Sie versuchen
EDIT: Dank Daniels Kommentar habe ich den Code in etwas geändert, das ich tatsächlich getestet habe, anstatt nur zu raten.
#include <stdio.h>
void print(char *);
int main(int argc, char ** argv)
{
char temp = 'r';
char temp2[] = {'a','b'};
char temp3[] = {'r'};
print(&temp);
print(temp2);
print(temp3);
printf("sizeof temp is %d\n",sizeof(&temp));
printf("sizeof temp2 is %d\n", sizeof(temp2));
printf("sizeof temp3 is %d\n",sizeof(temp3));
return 0;
}
void print(char * arr)
{
printf("size of arr is %d\n", sizeof(arr));
printf("arr contains %c\n", *arr);
}
Sie erhalten :
size of arr is 4
arr contains r
size of arr is 4
arr contains a
size of arr is 4
arr contains r
sizeof temp is 4
sizeof temp2 is 2
sizeof temp3 is 1