美文网首页计算机二级
每日一题 | C语言指针练习 一

每日一题 | C语言指针练习 一

作者: C语言Plus | 来源:发表于2019-10-16 14:58 被阅读0次

    看题:分析下列C语言代码,解释出现结果的原因!

    #include<stdio.h>

    int main()

    {

    char a[20] = { "You_are_a_girl" };

    printf("%s\n", a);

    int* ptr = (int*)a;

    ptr += 2;

    *ptr = 'abcd';

    for (int i = 0; i < 20; i++)

    {

    printf("%c", a[i]);

    }

    getchar();

    }

    这是运行结果

    结果

    解析:

    1、int* ptr = (int*)a;这条语句的作用是,把a强转为int型指针,并赋值给ptr。

    2、ptr += 2;这条语句的作用是,使ptr指针走两步,而ptr是int型指针,所以步长是4字节,走两步就是8字节。每个字母一个字节,意思就是走过了八个字符,ptr现在指向了第二个a字母。You_are_a_girl

    3、*ptr = 'abcd';这句话是最难理解的吧,应该。*ptr是整数,整数是四个字节,看后面的值abcd正好四个,每个占一个字节(大家看看ascii表,看下对应的二进制)01100001 01100010 01100011 01100100这就是理论的内存存储的二进制数,八个位(一个字节)存一个字母,分别是a,b,c,d

    4、经过上面的分析,对于输出基本没什么问题,最大的问题就是为什么abcd会是逆序输出的。这是因为对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)。具体的就不在这里解释了,想了解的自行科普

    更多学习资料,学习题目可以加群479478422,还有群主免费解答哦

    相关文章

      网友评论

        本文标题:每日一题 | C语言指针练习 一

        本文链接:https://www.haomeiwen.com/subject/kyxdpxtx.html