C语言字符指针变量和字符数组的比较

C语言是没有字符串类型的,字符串是存放在字符型数组中。C语言只有字符变量,没有字符串变量。

使用字符指针变量和字符数组的比较:

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

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

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

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

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

str[0] = 'I';                    //对字符数组元素赋值,合法!
str = "I love China";            //数组名是地址常量,不能被赋值,非法!

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

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

        等价于:

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

        而对数组的初始化:

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

        不等价于:

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

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

(4)存储单元的内容。

        编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元(32位机一般4B)

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

char *a = "I love China";
a = a + 7;                //改变指针变量的值,即改变指针变量的指向
printf("%s\n", a);        //输出从a指向的字符开始的字符串
char str[] = "I love China";
str = str + 7;            //数组名虽然代表地址,但它是常量,值不能改变。不合法。

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

(7)引用数组元素。

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

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

猜你喜欢

转载自blog.csdn.net/hola_ya/article/details/80603826