您的位置:首页 > 编程语言 > C语言/C++

C语言 指针引用字符串 以及 字符指针变量和字符数组的比较

2019-02-12 16:09 736 查看

(一)字符串的引用方式

(1)用字符数组存放一个字符串,可以通过数组名和下标引用字符字符串中一个字符,也可以通过数组名和格式声明“%s”输出该字符串。

举例:

#include<stdio.h>
int main()
{
    char string[]="I love China!";
    printf("%s\n",string);
    printf("%c\n",string[7]);
    return 0;
 } 

(2)用指针变量访问字符串。通过改变指针变量的值使它指向字符串中的不同字符。

 

(二)使用字符指针变量和字符数组的比较

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

 

(2)赋值方式:可以对字符指针变量赋值,但对不能对数字名赋值。

       可以采用下面方法对字符指针变量赋值:

       char *a;                   //a为字符指针变量

a = "I love China";      //将字符串首元素地址赋给指针变量,合法。但赋给a的不是字符串,而是字符串第一元素的地址。

 

不能用以下办法对字符数组名赋值:

char str[14];

str[0] = 'I';                    //对字符数组元素赋值,合法!

str = "I love China";       //数组名是地址常量,不能被赋值,非法!

 

(3)初始化的含义,对字符指针变量赋初值:

char *a = "I love China";         //定义字符指针变量a,并把字符串第一个元素的地址赋给a

        等价于:

char *a;                   //定义字符指针变量aa = "I love China";        //把字符串第一个元素的地址赋给a

 

        而对数组的初始化:

char str[14] = "I love China"; //定义字符数组str,并把字符串赋给数组中各元素。

 

        不等价于:

char str[14];                //定义字符数组strstr = "I love China";        //企图把字符串赋给数组中各元素,错误

        数组可以在定义时对各元素赋初值,但不能用赋值语句对字符数组中全部元素整体赋值。

 

(4)存储单元的内容。

        编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元(Visual C++为指针变量分配4个字节)

 

(5)指针变量的值是可以改变的,而数组名代表一个固定的值(数组元素的地址),不能改变。

 

char *a = "I love China";a = a + 7;                //改变指针变量的值,即改变指针变量的指向printf("%s\n", a);        //输出从a指向的字符开始的字符串

char str[] = "I love China";str = str + 7;            //数组名虽然代表地址,但它是常量,值不能改变。不合法。

 

 

(6)字符数组中各元素的值是可以改变的(可以对它们再赋值),但是字符指针变量指向的字符串常量中的内容是不可以被取代的(不能再赋值)。

char a[]="House";   //字符数组a初始化

char *b="House";//字符指针变量b指向字符串的第一个字符

a[2]='r';//合法,r取代a数组元素a[2]的原值u

b[2]='r';//非法,字符常量不能改变

 

 

(7)引用数组元素。

            字符数组可以用下表法(用数组名和下表)引用一个数组元素(如a[5]),也可以用地址法(如*(a + 5))。

            如果定义了字符指针变量p,并使他指向数组a的首元素,则可以用指针变量带下表的形式引用数组元素(如p[5]),地址法(如*(p + 5))引用数组元素a[5]。
 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: