2014.12.24

【字符串常量不能被改变】

eg:

#include<stdio.h>
int main()
{
	char *p="hello world";
	char *p="c";
	printf("%s\n",p);
	return 0;
}
【程序分析】

#include<string.h>
int main()
{
	char p[]="hello world";
	char *q="hello world";
	printf("%d\n",sizeof(p));//12 十一个字符还加上最后的\0
        printf("%d\n",sizeof(q));//4 指针q的长度(指针在C中占四个字节)
        printf("%d\n",strlen(p));//11 strlen函数遇到\0停止计数,最终结果为\0前面的字符长度
        printf("%d\n",strlen(q));//11
        printf("%d\n",sizeof(*p));//1 解引用,只能访问第一个元素,元素类型为char型
        printf("%d\n",sizeof(*q));//1 同上,相当于访问q指向的内容,即字符串第一个元素,其类型为char
	return 0;
}
【typedef和define的区别】

#include<stdio.h>
typedef char *ptr_to_char//将char *重新命名为ptr_to_char
#define PTR_TO_CHAR char *//将char *定义为PTR_TO_CHAR
int main()
{
	ptr_to_char c,d;//定义了c为指针变量,d为指针变量(c,d都被定义为了char *类型)
    PTR_TO_CHAR c,d;//定义c为指针变量,d为变量
    return 0;
}
【const的使用】

#include<stdio.h>
int main()
{
	int *p=NULL;
	int a=10;
	p=&a;
	*p=20;
	return 0;
}
1.把第四行改为int const *p=NULL,运行时错误。

原因:加const *是,p所指向的内容不能改(此时const修饰的是*p(内容))(即不能通过*p修改a的内容,但可以用a自身修改a的内容->eg:可直接用a=20使a 的值由10变为20,但不能用*p=20)

2.把第四行改为int *const p=NULL,运行时正确。

原因:const修饰的是指针变量,即可通过*p修改a的值。而若在程序里加上一行p=&b不可行(p只能指向a的地址,不能又改为指向b的地址)

<综上所述:>

惯用:当const 在*右边时,修饰的是指针变量,即不能改内容;

           当const 在*左边时,修饰的是指针指向的变量,即不能改所指向的地址;

           当为const * const是,修饰的是指针变量和指针指向的变量。

<另:在C中const 是常变量,即本身还是变量只是具有了常属性,在C++中const是一个变量>

eg:int const n=10;

        int a[n];

此语句在C中会报错,C++中正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值