关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » C/C++ »C语言杂谈:指针与数组(下)

    C语言杂谈:指针与数组(下)

    2015-04-28 00:00:00 出处:AMG架构师
    分享

    思维导图

    介绍

    前接上文C 杂谈之 指针与数组 (一),接续往下谈指针和数组。

    指针与数组 ——承接上文进行扩展

    你知道X = Y,在编译运行过程中,是什么样吗?

    字符指针与函数

    1> 字符串是一个以”结尾的字符数组。

    看一个例子:printf接受的是一个指向字符数组第一个字符的指针。

    这个例子与下面两个代码是一个道理.

    2> 几个常用字符函数的编写。

    1>>> strcat(s,t)函数,把t指向的字符复制到s指向的字符后面?——注意”

    #include <stdio.h>
    #include <assert.h>
    
    /*  strcat(ps, t): Copy the charactor pointed 
     *  by t  append to the character pointed by s  
     */
    void *strcat(char *ps, char *t){
        char *addr = ps;
        assert((ps != NULL) && (t != NULL));
        while(*ps){  /*  The s point to the last character   */
            ps++;
        }
    
        while(*ps++ = *t++){ /*  Copy t append to the s*/
        }
    
        return addr;
    }
    
    int main(){
        char s[5] =  "AB";
        char *t = "E";
        printf("%sn", strcat(s, t));
        return 0;
    }

    注意:在strcat里的两个指针ps和t,方法结束后,这两个函数都指向”后面,因为ps++操作是”先取结果,后自增”

    内存变化:

    2>>> 函数strend(s,t):字符串t出现在字符串s的尾部,返回1,否则返回0。

    strend
    
    int strlen(char *p){
        int iLen = 0;
        while(*p){
            iLen++;
            p++;
        }   
    
        return iLen;
    }
    
    /*  strend:find t in s  */
    int strend(char *s, char *t){
        int sLen = strlen(s);
        int tLen = strlen(t);
    
        if(tLen > sLen) return 0;
    
        while(*s)
            s++;
    
        while(*t)
            t++;
    
        for(;tLen--;){
            if(*--t != *--s) return 0;
        }   
    
        return 1;
    }
    
    int main(){
        char *s = "Hell Wold , Chuanshanjia";
        char *t = "Chuanshanjia";
    
        printf("%dn", strend(s, t));
        return 0;
    }

    3>>> strncpy(s,t,n) 将t中前n个字符复制到s中。

    strncpy(s,t,n)
    #include <stdio.h>
    
    int strlen(char *p){
        int i = 0;
        while(*p){
            p++;
            i++;
        }   
    
        return i;
    }
    
    /*  t中最多前n个字符复制到s中   */
    char *strncpy(char *s, char *t, int n){ 
        char *addr = s;
        if(!strlen(s) || !n) return 0;
    
        int tLen = strlen(t);
        if(!tLen) return 0;
    
        if(tLen < n)
            n = tLen;
    
        // Move the pointer s to the last
        while(*++s) ;
    
        while(n--){
            *s++ = *t++;
        }   
    
        return addr;
    
    }
    
    int main(){
        char s[20] = "Hell World ";
        char *t = "Chuanshanjia";
    
        printf("%sn", strncpy(s, t, 2222));
        return 0;
    }

    命令行参数

    1.第一个参数(常用argc表示)(:运行时命令行参数数目;第二个参数(常用argv表示)是一个指向字符串数组的指针。

    2.C语言规定,argv[0],表示启动程序的名称。

    3.实例

    运行结果:

    内存分配:

    解释:

    >> argv是一个指向指针数组的指针。

    所以接受参数也可以写成:

    结合上图,我们可以这样理解:从里向外看

    复杂声明

    1.阅读——从右向左规则。

    >> 规则符号:

    ———————————————————–

    * 读作”指向…的指针”

    [] 读作”…的数组”

    () 读作”返回…的函数”

    ———————————————————–

    下面两个示例:

    int *f() ; // f: 返回指向int型的指针

    >>步骤:

    1)找标识符f:读作”f是…”

    2)向右看,发现”()”读作”f是返回…的函数”

    3)向右看没有什么,向左看,发现*,读作”f是返回指向…的指针的函数”

    4)继续向左看,发现int,读作”f是返回指向int型的指针的函数”

    int (*pf)(); // pf是一个指针——指向返回值为int型的函数

    1)标识符pf,读作“pf是…”

    2)向右看,发现),向左看,发现*,读作 “pf是指向…的指针”

    3)向右看,发现”()”,读作“pf是指向返回…的函数的指针”

    4)向右看,没有,向左看发现int,读作”pf是指向返回int型的函数的指针”

    总结

    我最近着重看C,是因为我想深入了解一下PHP内核语言和服务器模块开发。现在的C语言,能够让我更深入的了解计算机内部。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    电脑屏幕不小心竖起来了?别慌,快捷键搞定

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    IT头条

    Synology 更新 ActiveProtect Manager 1.1 以增强企业网络弹性和合规性

    00:43

    新的 Rubrik Agent Cloud 加速了可信的企业 AI 代理部署

    00:34

    宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

    00:21

    Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

    02:05

    投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

    01:18

    技术热点

    大型网站的 HTTPS 实践(三):基于协议和配置的优化

    ubuntu下右键菜单添加新建word、excel文档等快捷方式

    Sublime Text 简明教程

    用户定义SQL Server函数的描述

    怎么在windows 7开始菜单中添加下载选项?

    SQL Server 2016将有哪些功能改进?

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。