关闭 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语言,能够让我更深入的了解计算机内部。

    上一篇返回首页 下一篇

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

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

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

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