zoukankan      html  css  js  c++  java
  • C语言基础学习5:字符串与指针

    1、字符串的表示形式

    (1)用字符数组存放一个字符串,然后输出该字符串。

    char string[] = "I am happy";
    printf("%s",string);

    (2)用字符指针指向一个字符串。

    char *string = "I am happy";
    printf("%s",string);

    2、字符指针作函数参数

    (1)用字符数组作参数

    void CopyString(char from[], char to[])
    {
        int i = 0;
        while(from[i]1='')
        {
            to[i] = from[i];
            i++;
        }
        to[i] = '';
    }

    (2)形参用字符指针变量

    void CopyString(char *from, char *to)
    {
        for(;*from!='';from++,to++)
            *to = *from;
        *to = '';
    }

    上述函数还可以有一下变形:

    变形1:

    void CopyString(char *from, char *to)
    {
        while((*to = *from)!='')
        {
            to++;
            from++;
        }
    }

    变形2:

    void CopyString(char *from, char *to)
    {
        while((*to++ = *from++)!='')
    }

    也可以写成如下形式:

    void CopyString(char *from, char *to)
    {
        while(*to++ = *from++)
    }

    变形3:

    void CopyString(char *from, char *to)
    {
        while(*from++!='')
            *to++ = *from++;
        *to = '';
    }

    也可以写成下列形式:

    void CopyString(char *from, char *to)
    {
        while(*from++)
            *to++ = *from++;
        *to = '';
    }

    变形5:

    函数体中while语句也可以写成:

    for(;(*to++=*from++)!='';);
    for(;*to++=*from++;);

    3、对使用字符指针变量和字符数组的讨论

    (1)字符数组由若干个元素组成,每个元素中放一个字符;而字符指针变量中存储的是地址(字符串中第一个字符的地址),绝不是将字符串放到字符指针变量中。

    (2)赋值方式。字符指针可以分开写,字符数组则不行。

    char str[15] = "I am happy";
    
    char *p;
    p = "I am happy";

    (3)如果定义了一个字符数组,在编译时为它分配内存单元,它有确定的地址。而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个字符变量的地址,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,则它并未具体指向一个确定的字符数据。

    例如:

    char str[10];
    scanf("%s",str);

    上述是可以的。

    但是像下面这种情况

    char *p;
    scanf("%s",p);

    是危险的,p的值是无法预料的可能指向空白的用户存储区,也可能指向以存放指令或数据的有用内存段,这就会破坏程序,破坏系统。可以做以下修改:

    char *p,str[10];
    p = str;
    scanf("%s",p);

    (4)指针变量的值是可以改变的。而字符数组的数组名虽然也代表地址,但是一旦定义后它就是常量,不能改变。

    (5)用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

    char *format;
    format = "a=%d,b=%d
    ";
    printf(format,a,b);
  • 相关阅读:
    SSL certificate verify failed” using pip to install packages
    Getting The following errors when installing boto3
    D3 Scale functions
    Making a simple scatter plot with d3.js
    Basic scatterplot in d3.js
    D3 Tick Format
    CentOS定时备份mysql数据库和清理过期备份文件
    linux yum清除var目录下缓存的方法
    正则表达式纯数字校验
    每天一个Linux命令--查看当前登陆用户并强制退出
  • 原文地址:https://www.cnblogs.com/iambitiousman/p/3855674.html
Copyright © 2011-2022 走看看