字符数组,字符指针

const char str1[]="abc";
const char str2[]="abc";
const char *p1="abc";
const char *p2="abc";

问:

(1)str1和str2的地址是否相同?

(2)p1和p2的地址是否相同?

写个程序简单地测试一下:

#include<stdio.h>

void main()
{
	const char str1[]="abc";
	const char str2[]="abc";
	const char *p1="abc";
	const char *p2="abc";
	if(str1==str2)
		printf("str1==str2\n");
	else
		printf("str1!=str2\n");
	if(p1==p2)
		printf("p1==p2\n");
	else
		printf("p1!=p2\n");
}
程序运行结果:

str1!=str2
p1==p2

简要的解释如下(具体参考: http://blog.csdn.net/qiumm/article/details/5657120 ):

  字符数组str1、str2与字符指针p1、p2的区别是:str1、str2是数组,可以改变数组中保存的内容;p1、p2是指针,可以指向不同的字符串,但是不能改变所指的字符串常量。

  也就是,定义一个字符数组,就相应地在内存中为数组分配空间,每个字符数组得到各自的内存空间,因此字符数组的地址是不相同的;而字符指针是指向公用的常量区的字符,如果字符串相同,那么指针所指向的内存地址也是相同的。

  对于const的理解,这道题目体现的不是很明显。以后有机会补上!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值