`

C语言字符串与指针

 
阅读更多

(1)用字符指针指向一个字符串

示例:
#include <stdio.h>

int main()
{
    char *string="I love China!";
    printf("%s\n",string);   //输出定义的字符串
}

(2)字符串中字符的存取方法

对字符串中字符的存取方法,可以有两种方法:下标方法和指针方法。

下标方法:将字符串str复制到字符串chr

#include <stdio.h>

int main()
{
    char str[] = "She is a beautiful gril!",chr[40];
    int i;
 for(i=0;*(str+i)!='\0';i++)
 {
     *(chr+i) = *(str+i);
 }
 *(chr+i)='\0';

 printf("String str is:%s\n",str);
 //printf("String chr is:%s\n",chr); 
 printf("String chr is:");
 for(i=0;chr[i]!='\0';i++)
 {
     printf("%c",chr[i]);
 }
 printf("\n");
 return 0;
}

指针方法:将字符串str复制到字符串chr

#include <stdio.h>

int main()
{
    char str[] = "She is a beautiful gril!",chr[40],*p1,*p2;
    int i;
    p1=str;
    p2=chr;
    for(;*p1!='\0';p1++,p2++)
    {
        *p2=*p1; //把p1的值依次赋值给p2
    }
 *p2='\0';
 printf("String str is:%s\n",str);
 printf("String str is:");
 for(i=0;chr[i]!='\0';i++)
 {
     printf("%c",chr[i]);
 }
 printf("\n");
 return 0;
}

此两种方法的输出结果都是:

(3)用函数调用实现字符串的复制

方法一:用字符数组作参数 

#include <stdio.h>

int main()
{
    void copy_string(char a[],char b[]);
    char str[]="I am a teacher!";
    char chr[]="You are a student!";
    int i;
    printf("String str is:%s\n",str);
    printf("String chr is:%s\n",chr);
    printf("\n");

    printf("copy string chr to string str:\n");
    copy_string(str,chr); //把str和chr这两个数组的第一个地址传递过去
    printf("String str is:%s\n",str);
    printf("String chr is:");
    for(i=0;chr[i]!='\0';i++)
    {
         printf("%c",chr[i]);
    }
    printf("\n");
    return 0;
}

void copy_string(char a[],char b[])
{
    int i=0;
    while(a[i]!='\0')
 {
     b[i]=a[i];
     i++;
 }
 b[i]='\0';
}

方法二:用字符指针作参数 

#include <stdio.h>

int main()
{
    void copy_string(char *a,char *b);
 
    char *str="I am a teacher!";
    char chr[]="You are a student!";
    printf("String str is:%s\nString chr is:%s\n",str,chr);
 
    printf("copy string chr to string str:\n");

    copy_string(str,chr);

    printf("String str is:%s\nString chr is:%s\n",str,chr);
    return 0;
}

void copy_string(char *a,char *b)
{
    while(*a!='\0')
    {
       *b++=*a++;
    }
    *b='\0';

}

此两种方法的运行结果是:

(4)对使用字符指针变量和字符数组的讨论

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但是它们二者有差别的,不能混为一谈。

主要概况起来有以下几点:
1、字符数组由若干个原始组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。
2、赋值方式。对字符数组只能对各个元素赋值。
不能用以下方法对字符数组赋值:
  char str[20];
  str = "I love China!";
而对字符指针变量,可以用下面的方法赋值:
  char *a;
  a = "I love China!";
但注意赋给a的不是字符,而是字符串第一个元素的地址。

3、对字符指针变量赋初值:
  char *a = "I love China!";
等价于
  char *a;
  a = "I love China!";
而对数组的初始化:
  char str[20] = {"I love China!"};
不能等价于
  char str[20];
  str[] = "I love China!";

4、指针变量的值是可以改变的

例如:

#include <stdio.h>

int main()
{
    char *str="I love China!";
    printf("%s\n",str);
    str+=7;
    printf("%s\n",str);
    return 0;
}

运行结果:

另外需要说明的是,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。

例如:

#include <stdio.h>

int main()
{
    char *str="I love China!";
    int i;
    printf("The sixth character is %c\n",str[5]);

    for(i=0;str[i]!='\0';i++)
    {
         printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}

执行结果是:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics