c语言 字符指针与字符做比较,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)字符数组中各元素的值是可以改变的(可以对它们再赋值),但是字符指针变量指向的字符串常量中的内容是不可以被取代的(不能再赋值)。

char q[] = "abcdefghi";

printf("%c\n", *q);

*q = 'c'; // 正确

printf("%c\n", *q);

char *p = "abcdefghi";

printf("%c\n", *p);

*p = 'c'; // 错误

printf("%c\n", *p);

(7)引用数组元素。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值