自从我在C上工作已经很长时间了,所以现在重新审视它。
你能帮我解释一下有什么价值吗?ptr'请输入以下代码?
char str[] = "100";
char *ptr;
ptr = *str;
printf("\n %p \t %d \n", ptr, ptr);
输出显示:
0x31 49
我知道将* str分配给ptr是不正确的,但是我想了解这实际意味着什么。 49那么49站在这里?
答案 0 :(得分:1)
49是您使用%d打印的1的ASCII代码值。
由于您正在打印数组的第一个内存位置中存在的元素值(ptr = * str = * str [0]),这里为1,因此您获得的ASCII值为1,因为%d。
答案 1 :(得分:1)
str
不是char数组,它只是一个指针,它指向假定数组的第一个内存位置,就像@Am_I_Helpful所说的那样。通过编写*str
,您可以获取位于str
点的位置的值 - 这意味着您将获取数组中的第一个值。
答案 2 :(得分:1)
C在为不同类型的变量赋值时非常宽容。这就是为什么你没有得到错误,即使你应该!
因此,您要将*str
或str
点分配给ptr
。 str
是一个char指针,因此它指向一个char,在本例中为'1'
中的"100"
。
那就是你赋予ptr
的值,值'1'
或49.(至少在基于ASCII的系统中。在另一个系统上,你会得到{{{{例如,在EBCDIC机器上,'1'
将是241而不是49。)
然后你试图打印'1'
的值,首先作为指针,以十六进制显示指针的数值,然后作为小数,只显示数值。
现在你不打算打印ptr
是一件好事,因为那会非常错误!