基础知识(四)

对于c++的cout自动判断类型,它对于字符串是如下处理的
1.对于cout<< 字符串某一元素地址;它会输出从该字符开始到'\0'为止的全部字符相当于printf("%s",p2); 
2.输出单个字符和c语言相似,cout<< *p2;printf("%c",*p2);
3.输出字符串某一元素地址,c++只会对char*类型的有这样的一种特殊判断,所以需要转换类型(void*)后再输出,而c只需要如下文所示的方法就行


下面是对于这一写法p2真正类型的探讨,有以下4种可能: 
1.char * 若是单纯的char*,那么p2可以修改其自身的值,也可以修改其所指对象的值 
2.const char * 不允许修改所指对象的值,但可以修改自身的值(下面的例子可以证明,即使修改所指对象的值可以通过编译,但也会被系统中断)
3.char * const  但可以修改所指对象的值
4.const char * const 不允许修改自身的值和所指对象的值


char *p2="abcd";这种写法编译器会给出warning,还是尽量不要用了
[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings] 


cin cout和scanf printf,我记得这两种输入输出不太兼容,有时会出错,勿要混用 

//对于c++的cout自动判断类型,它对于字符串是如下处理的
//1.对于cout<< 字符串某一元素地址;它会输出从该字符开始到'\0'为止的全部字符
//相当于printf("%s",p2); 
//2.输出单个字符和c语言相似,cout<< *p2;printf("%c",*p2);
//3.输出字符串某一元素地址,c++只会对char*类型的有这样的一种特殊判断,
//所以需要转换类型(void*)后再输出,而c只需要如下文所示的方法就行

//下面是对于这一写法p2真正类型的探讨,有以下4种可能: 
//1.char * 若是单纯的char*,那么p2可以修改其自身的值,也可以修改其所指对象的值 
//2.const char * 不允许修改所指对象的值,但可以修改自身的值
//(下面的例子可以证明,即使修改所指对象的值可以通过编译,但也会被系统中断)
//3.char * const  但可以修改所指对象的值
//4.const char * const 不允许修改自身的值和所指对象的值

//char *p2="abcd";这种写法编译器会给出warning,还是尽量不要用了
//[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings] 

//cin cout和scanf printf,我记得这两种输入输出不太兼容,有时会出错,勿要混用 

#include<iostream>
//#include<cstdio>
using namespace std;
int main()
{
	char *p2
	cout << *p2 << endl;//a
	cout << p2 << endl;//abcd
	cout << &p2 << endl;//0x22fe40
	//printf("%p\n",&p2);//000000000022fe40
	void *p=p2;
	cout << p << endl;//0x488000
	//printf("%p\n",p2);//0000000000488000

	char *p1;
	p1=p2;
	cout << p1 << endl;
	
	//char p3[]=p2;//error

	char *p4=p2;
	
	char p3[]="abcd";
	p3[0]='b';
	cout<< p3 << endl;
	
	//p2[0]='b';//error

	p2="dcba";
	cout << p2 << endl;	
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值