zoukankan      html  css  js  c++  java
  • 指针与字符串实例练习

    在C语言中,字符串是存放在字符数组中的,字符串的引用如下:

    char string[] ="I love China!";//定义字符数组string
    
    printf("%s
    ",string);//输出整个字符串
    
    printf("%c
    ",string[7]);//输出第七个元素

    该字符串长度是14,最后一个字节存放字符串结束符''。

    例1:通过字符指针变量输出一个字符串。

    1 int main()
    2 {
    3     char *string="I love China!";
    4     printf("%s
    ",string);
    5     return 0;
    6 }

    定义一个char*变量,即字符型指针变量string,用字符串常量"I love China!"初始化,把字符串的第一个元素的地址赋给指针变量string,使string指向字符串的第一个字符。

    %s使输出字符串格式符,系统会输出string指向的第一个字符,然后自动使string+1,指向下一个字符,直到''为止。

    例2:将字符串a复制为字符串b,然后输出字符串b。

     1 int main()
     2 {
     3     char a[]="I am student.",b[20],*p1,*p2;
     4     p1=a;p2=b;//指向数组中第一个元素 
     5     for(;*p1!='';p1++,p2++)
     6        *p2=*p1;
     7     *p2='';
     8     printf("string a is:%s
    ",a);
     9     printf("string b is:%s
    ",b);
    10     return 0; 
    11 }

    例3:用函数调用实现字符串的复制。

    (1).用字符数组名作为函数参数。

     1 int main()
     2 {
     3     void copy(char from[],char to[]);
     4     char a[]="I am a student.";
     5     char b[]="You are a student.";
     6     printf("string a=%s
    string b=%s
    ",a,b);
     7     printf("copy string a to string b:
    ");
     8     copy(a,b);//用字符数组名作为实参
     9     printf("
    string a=%s
    string b=%s
    ",a,b);
    10     return 0; 
    11 }
    12 void copy(char from[],char to[])//形参为字符数组 
    13 {
    14     int i=0;
    15     while(from[i]!='')
    16     {
    17         to[i]=from[i];
    18         i++;
    19     }
    20     to[i]=''; 
    21 }

    (2).用字符型指针变量作实参。

     1 int main()
     2 {
     3     void copy(char from[],char to[]);
     4     char a[]="I am a student.";
     5     char b[]="You are a student.";
     6     char *from=a,*to=b;//指针变量指向数组首元素 
     7     printf("string a=%s
    string b=%s
    ",a,b);
     8     printf("copy string a to string b:
    ");
     9     copy(from,to);//用字符指针变量作实参 
    10     printf("
    string a=%s
    string b=%s
    ",a,b);
    11     return 0; 
    12 }
    13 void copy(char from[],char to[])//形参为字符数组 
    14 {
    15     int i=0;
    16     while(from[i]!='')
    17     {
    18         to[i]=from[i];
    19         i++;
    20     }
    21     to[i]=''; 
    22 }

    (3).用字符指针变量作形参和实参。

     1 int main()
     2 {
     3     void copy(char *from,char *to);
     4     char *a="I am a student.";
     5     char b[]="You are a student.";
     6     char *p=b;
     7     printf("string a=%s
    string b=%s
    ",a,b);
     8     printf("copy string a to string b:
    ");
     9     copy(a,p);//用字符指针变量作实参 
    10     printf("
    string a=%s
    string b=%s
    ",a,b);
    11     return 0; 
    12 }
    13 void copy(char *from,char *to)//形参为字符指针变量 
    14 {
    15     for(;*from!='';from++,to++)
    16        *to=*from; 
    17     *to=''; 
    18 } 

    上述的三个程序区别实参和形参的不同,都达到了复制字符串的目的,仔细观察三个程序不同的地方,总结字符指针变量和字符数组的区别如下:

       1.字符数组中存放的是元素,而字符指针存放的是地址。

       2.可以对字符指针变量赋值,但不能对数组名赋值。

         char *a;  a="I love China!";//正确的

         char string[14];  string="I love China!";//错误的

       3.初始化含义不同。

          char *a="I love China!";//把字符串第一个元素的地址赋给a

          char string[]="I love China!";//把字符串赋给数组中的各个元素

       4.指针变量的值是可以改变的,但数组名代表数组首元素的地址,是个固定值,不能改变。

  • 相关阅读:
    angular 中如何使用自定义组件
    angular组件数据和事件
    angular组件数据
    angular绑定数据
    angular自定义组件
    angular项目目录结构分析
    Angular 开发工具介绍
    从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
    EF How to use context.Set and context.Entry, which ships with EF4.1 ?
    C# 向IQueryable添加一个Include扩展方法
  • 原文地址:https://www.cnblogs.com/wxywxy/p/6883193.html
Copyright © 2011-2022 走看看