C指针输出如下需要说明

时间:2015-08-23 13:38:00

标签: c pointers

输出如何成为杰克?

#include <stdio.h>

int main()
{
    void *vp;
    char ch = 74, *cp = "JACK";
    int j = 65;
    vp = &ch;
    printf("%c", *(char*)vp);
    vp = &j;
    printf("%c", *(int*)vp);
    vp = cp;
    printf("%s", (char*)vp + 2);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

vp = &ch;
printf("%c", *(char*)vp);

使用代码74(J)输出字符

vp = &j;
printf("%c", *(int*)vp);

使用代码65(A)输出字符

vp = cp;
printf("%s", (char*)vp + 2);

输出字符串“JACK”,偏移量为2(CK)

=&GT; JACK

答案 1 :(得分:1)

printf("%c", *(char*)vp); vp指向包含char的{​​{1}}地址'J'

printf("%c", *(int*)vp); vp指向包含65的int的地址,该地址为'A'

的ASCII

printf("%s", (char*)vp + 2); vp指向"Jack"。高级2时,会打印"CK"

答案 2 :(得分:1)

下面:

char ch=74

74是字符'J'的十进制值,因此与

相同
char ch='J'

下面:

int j=65;

65是字符'A'的十进制值,因此与

相同
int j='A';

所有这些都可以在the ASCII table中找到。

所以,

printf("%c", *(char*)vp);

J打印为vp,此时指向ch的地址,其中包含值74('J')并将其转换为{{1}并且取消引用它会得到74(char*)。

类似地,

'J'

printf("%c", *(int*)vp); 打印为A,此时指向vp的地址,其中包含值65(j)并将其转换为{{1}并且取消引用它会给出65('A')。

最后,

int*

相同
'A'

因为printf("%s", (char*)vp + 2); 指向printf("%s", cp + 2); 的第一个元素的地址。上面的vp表示“打印从字符串的第三个字符开始的所有内容,直到NUL-terminator ”,这将打印cp