C - 基本指针问题

时间:2016-09-24 13:11:05

标签: c pointers

自从我在C上工作已经很长时间了,所以现在重新审视它。

你能帮我解释一下有什么价值吗?ptr'请输入以下代码?

char str[] = "100";
char *ptr;
ptr = *str;
printf("\n %p \t %d \n", ptr, ptr);

输出显示:

0x31 49

我知道将* str分配给ptr是不正确的,但是我想了解这实际意味着什么。 49那么49站在这里?

3 个答案:

答案 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在为不同类型的变量赋值时非常宽容。这就是为什么你没有得到错误,即使你应该! 因此,您要将*strstr点分配给ptrstr是一个char指针,因此它指向一个char,在本例中为'1'中的"100"

那就是你赋予ptr的值,值'1'或49.(至少在基于ASCII的系统中。在另一个系统上,你会得到{{{{例如,在EBCDIC机器上,'1'将是241而不是49。)

然后你试图打印'1'的值,首先作为指针,以十六进制显示指针的数值,然后作为小数,只显示数值。

现在你不打算打印ptr是一件好事,因为那会非常错误!