关闭 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固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    IT头条

    Synology 对 Office 套件进行重大 AI 更新,增强私有云的生产力和安全性

    01:43

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    技术热点

    如何删除自带的不常用应用为windows 7减负

    MySQL中多表删除方法

    改进的二值图像像素标记算法及程序实现

    windows 7 32位系统下手动修改磁盘属性例如M盘修改为F盘

    windows 7中怎么样在家庭组互传文件

    Linux应用集成MySQL数据库访问技巧

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

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