• char s[] 和 char *s 的区别


    之前自己写代码碰到 char s[];和char *s 的各种方面总是搞不清楚,知道他们是不一样的,但因为将他们打印出来有都是 相同的地址所以一直懵逼,今天特地网上整理了下,将他们彻底搞定

    不同点:

    1.在声明时

    char *s1="hello";//声明一个指针指向常量"hello"
    char s2[]="hello";//在栈中开辟一个数组字符"hello";
    /** s2[]="hello" 相当于
    * char s2[6];
    * s2[0]='h';
    * s2[1]='e';
    * s2[2]='l';
    * s2[3]='l';
    * s2[4]='0';
    * s2[5]='';
    **/

    说明:

    s1内容不能修改,因为他指向常量
    s2内容可以修改,因为他指代内存中的变量区
    s2其地址和容量在生命期里不能改变

    2.使用时

    char str[255];//声明一个字符数组str占255个字节
    char *p;//声明一个字符串指针p
    char *sp;//声明一个字符串指针sp
    
    sp = str;/**实际上是 sp=&str; 编译器做过处理**/
    //需要有一个指针来保存原先地址
    p=sp;
    *(sp++)='1';
    *(sp++)='2';
    *sp++='3';//相当于*(sp++)
    *sp++='4';
    *sp++='5';
    *sp='';
    printf("%s
    ",p);
    
    printf("%p
    ",p);
    printf("%p
    ",&str);
    printf("%p
    ",sp-5);
    printf("%s
    ",(sp-5));
    
    //等同于===============================================
    int i=0;
    char str[255];//声明一个字符数组str占255个字节
    char *p;//声明一个字符串指针p
    
    p=str;
    str[i++]='1';
    str[i++]='2';
    str[i++]='3';
    str[i++]='4';
    str[i++]='5';
    str[i]='';
    
    printf("%s
    ",p);
    printf("%p
    ",p);

    说明:

    char str[] 实际是一个(字符数组)指针,不是(字符)指针 
    char str[] 不是一个真实意义(声明的)的指针类型,不能进行正常指针的加减计算操作
    char *p是一个指针类型可以进行计算操作


    相同点:
    1.作为形参完全相同
    例:

    void function(char *s1);
    void function(char s1[]);


    2.只读取不修改的时候
    例:

    char *s1="hello";
    char s2[]="hello";
    printf("s1[1]=[%c]
    ",s1[1]); //s1[1]=[e] 
    printf("s2[1]=[%c]
    ",s2[1]); //s2[1]=[e] 
    printf("s1=[%s]
    ",s1); //s1=[hello]
    printf("s2=[%s]
    ",s2); //s2=[hello]

    原文地址

  • 相关阅读:
    关于基于.net的WEB程序开发所需要的一些技术归纳
    技术的学习方法探索之一
    生活,就是让程序为人们服务!
    js滑动提示效果
    radio判断是否为空
    JS清除网页历史记录,屏蔽后退按钮
    多表查询存储过程
    IP地址转化为数字,charindex ,SUBSTRING
    c# byte转化为string
    获得IP地址中文
  • 原文地址:https://www.cnblogs.com/zjhblogs/p/6860184.html
Copyright © 2020-2023  润新知