指针系统学习5-对使用字符指针变量和字符数组的讨论

Posted tianqizhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针系统学习5-对使用字符指针变量和字符数组的讨论相关的知识,希望对你有一定的参考价值。

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

主要概括起来有以下几点:

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

2. 赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
     char  str[20];
     str=″I love Fishc.com!″;
 
  而对字符指针变量,可以采用下面方法赋值:
     char *a;
     a=″I love Fishc.com!″;
  但注意赋给a的不是字符,而是字符串第一个 元素的地址。

3. 对字符指针变量赋初值:
    char *a=″I love Fishc.com!″;
       等价于
      char *a;
    a=″I love Fishc.com!″;

    而对数组的初始化:
    char str[20]={″I love Fishc.com!″};
    不能等价于
    char str[20];
    str[ ]=″I love Fishc.com!″;

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

我们举个例子来说明,如:
  char str[10];
  scanf(″%s″,str);
     以上是完全可以的!

而常有人用下面的方法,目的是想输入一个字符串,虽然一般也能运行,但这种方法是危险的 :
             char *a;
      scanf(″%s″,a);

5. 指针变量的值是可以改变的,如:改变指针变量的值

技术分享图片
#include <stdio.h>

void main()
{
      char *a = "I love Fishc.com!";
      printf("%s
", a);//I love Fishc.com!

      a += 7;
      printf("%s
", a);//Fishc.com!
}
View Code

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

技术分享图片
#include <stdio.h>
void main()
{
      char *a = "I love Fishc.com!";
      int i;

      printf("The sixth character is %c

", a[5]);//The sixth character is e

      for( i=0; a[i] != ; i++ )
      {
            printf("%c", a[i]);
      }
      //I love Fishc.com!
      printf("
");
}
View Code

 
















































以上是关于指针系统学习5-对使用字符指针变量和字符数组的讨论的主要内容,如果未能解决你的问题,请参考以下文章

指针与一维数组和二维数组以及字符串指针数组的学习笔记

《C语言程序设计》指针

《C语言程序设计》指针

C语言指针学习总结

c++通过指针变量对键盘输入的字符串中的字符按ASCII码值从小到大排列有如下要求定义一个字符数组

第8周:指针与字符串浙大翁恺