字符串常量下标引用

#include <stdio.h>
int main()
{
	char str[]="hello";
	str[1]='h';
	printf("%c\n",str[1]);
	//printf("%c\n",str++);//编译不通过
	//数据名相当于一个常量指针,即所指向的内容可以改变,但地址不能改变

	char *strp="hello world";
	//strp[0]='p';//1 此处不加注释会报错
	strp=str;	//2
	printf("%c\n",*strp++);//3
	/*strp为指向常量的指针,所指向的字符串内容不能改变,故第一句语句会报错
	但其地址可以改变,现在strp指向"hello",第二句语句正常,自然第三句也正确*/

	printf("str:%s\n",str);//1
	printf("&str:%s\n",&str);//2
	printf("%s\n",&str[0]);//3
	/*以上三句都输出"hello",str指向的地址和&str、&str[0]的值是相等的,但是
	&str与str或&str[0]的类型不同,&str是数组对象的地址,而str和&str[0]是数组
	首元素的地址,但他们的值是相等的。*/

	char c=*("hello world"+1);// 以前没遇到过
	//"hello world"[2]='2';//1 这边运行出现错误,
	printf("%c\n","hello world"[2]);//2 可以正常打印
	/*根据以上两句结果来看,相当于将"hello world"看成是指向常量的指针*/
	return 0;
}

上面是我学习数组、字符串常量学习的过程分析。(程序在vc6.0下面调试)程序的输出结果为:

本文的学习参考了一下:

http://www.cppblog.com/cc/archive/2011/11/04/4045.html和

http://bbs.chinaunix.net/thread-854146-1-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值