• 我也要学C语言第十五章:指针与字符串以及链式表达式


      今天上午,我学完了指针与字符串部分,这部分是通过一些例子加深对指针与字符串的理解。

      我们首先来看1个例子:

    #include <stdio.h>

    void main()
    {
    int a[] = {6, 60, 600};
    int*p =a;

    *p++;

    printf(
    "%d", *p);
    }

    大家一起分析下,这个程序的结果是什么?!数组里面有3个元素,P是指向了数组首地址,然后是*p++,会输出什么呢?!嘿嘿!当然输出60,因为++先结合,++后得到第二个元素的指针,然后取内容输出60。

    如果我们想第一个元素6加1,我们就应该这样写:

    #include <stdio.h>

    void main()
    {
    int a[] = {6, 60, 600};
    int*p =a;

    (
    *p)++;

    printf(
    "%d", *p);
    }

    这个例子主要是巩固优先级的问题,以及指针和数组关系的问题。

    拷贝字符串

    请下面这个拷贝字符串的例子:

    #include <stdio.h>

    void str_cpy(char* pDest, char*pSrc)
    {
    while (*pDest++=*pSrc++);
    }

    void main()
    {
    char sz1[32];
    char sz2[] ="Hello world";

    str_cpy(sz1, sz2);

    printf(
    "%s\r\n", sz1);
    }

    注意分析,*pSrc++这里的++是后缀,它是最后加1.最后什么时候退出while循环的呢?!当然我们知道是左值为0的时候。大家是不是觉得这个拷贝字符串的函数写得非常的简洁啊,就1行!嘿嘿!

    系统原版拷贝字符串的优势

      如果我们查询下系统原版的拷贝字符串它比我们多1个东西,就是它会返回1个char *,我们来看看原版的好在哪里:

    #include<stdio.h>
    #include
    <string.h>

    void str_cpy(char* pDest, char*pSrc)
    {
    while (*pDest++=*pSrc++);
    }

    void main()
    {
    char sz0[32];
    char sz1[32];
    char sz2[] ="Hello world";

    strcpy(sz0, strcpy(sz1, sz2));

    printf(
    "%s\r\n", sz0);
    }

    拷贝其实就是像整型的赋值运算,赋值运算的值等于左值,系统的这个函数返回一个左值。这样的话,系统的拷贝字符串可以实现链式表达式

      有些朋友说,有点跟不上了,我觉得原因是你没有调试啦!,如何有点疑惑的地方你就调试分析内存!我通过2周的学习有点以下学习经验呢,在遇到问题的时候你首先自己调试分析内存去解决问题,不要去看所谓的大师的解释!,因为大师们大多为了炫耀技术啦!他们的目标是让不懂的你更加不懂。自己调试分析内存是学习的最快捷径,因为内存是什么样子的,那么它就是什么样子的啦!重要的是相信自己和相信机器。用实践去证明大师们的理论。脱离了调试与内存分析,盲目的听从大师的话,会迷失自我。有句话是,要成为大师就需要去模仿大师,但是模仿的东西是大师在还没有成为大师之前的刻苦的努力,很多东西一调试1下子就会豁然开朗!很多概念的东西,我学1次我根本是不明白的,因为没有变为我自己的,用调试的方式去学习,你会看到数据真真实实的存在于内存的哪个地方,你会很踏实的啦!

  • 相关阅读:
    【总结整理】javascript的函数在if中调用时是否加括号---与.net的不同之处
    【总结整理】javascript的函数调用时是否加括号
    【总结整理】JavaScript的DOM事件学习(慕课网)
    关于overflow:hidden (转)
    CSS
    HTML
    jQuery
    函数
    装饰器
    python的条件与循环1
  • 原文地址:https://www.cnblogs.com/dodolook/p/2070695.html
Copyright © 2020-2023  润新知