空字符串、'\0'、0与NULL的区别以及数组清零的特点分析

空字符串与NULL的区别:

NULL说明:1、等价于没有任何值、是未知数。2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。3、对空值做加、减、乘、除等运算操作,结果仍为空。

还可以这么理解:

空字符串(" "):已经分配了存储空间,只是没有存储东西而已。NULL:没有分配存储空间。没有内存空间的话是不能对变量或对象进行操作的,否则会出现异常。


字符'0'的ASCII是48,空格的ASCII是32, NULL(空字符)的ASCII是0。

'\0'表示对字符'0'进行转义,转义之后则表示特殊的含义:字符串结束标志符。



例子1:

a:

void main()
{
    char arr[100]={0,' ',97,' ',48,' ',49};//定义一个字符数组
    if(arr[0]==NULL)//#define NULL 0(其实是系统已定义好的)
    {
       cout<<"打印出字符数组:"<<arr<<endl;
    }
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}     
//字符数组d[ ]中的第一个元素为0,0直接作为ASCII码值保存,表示为NULL ,所以输出为空。


b:

void main()
{
    char arr[100]={0,' ',97,' ',48,' ',49};
    if(arr[0]=='\0')//注意此处比较的值是字符串结束符
    {
        cout<<"打印出字符数组:"<<arr<<endl;
    }
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}

//通过以上示例a与b:说明'\0'与0等价,都表示NULL

 总结:0=='\0'==NULL

如果你还不信,请再看下面一个例子:

void main()
{
    char arr[100];
    if(0=='\0')//该处证明了0与'\0'等价
    {
	arr[0]=0;//将数组清零
	cout<<"打印出字符数组:"<<arr<<endl;
    }
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}



例子2:

void main()
{
    char arr[100]={0,' ',97,' ',48,' ',49};//定义一个数组,其中' '表示空格,空格占用一个字符
    arr[0]='0';//注意此处传入的值为字符0,而不是数字0哦
    cout<<"打印出字符数组:"<<arr<<endl;
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}

//其中(97,48,49)作为ASCII码值保存到内存中,表示为(字符’a‘,字符’0‘,字符’1‘)




例子3:

void main()
{
    char arr[100]="   "; //定义一个字符串,空了3格
    cout<<"打印出字符数组:"<<arr<<endl;
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}
//一个空格占一个字符哦



例子4:

void main()
{
    char arr[100]={'0',48};
    if(arr[0]==0)//条件不成立,因为0与'0'是不一样的哦,0表示NULL,而'0'表示单字符0
    {
       cout<<"打印出字符数组:"<<arr<<endl;
    }
    cout<<"字符数组长度为:"<<strlen(arr)<<endl;
    system("PAUSE");
}



例子5:

void main()
{
    int a='0';//定义一个整型变量a
    char b=48;//定义一个字符变量b;
    cout<<a<<endl;
    cout<<b<<endl;
    system("PAUSE");
}
//此例说明字符0是以ASCII码值48保存到内存中的,然后赋值给了a;而48直接作为ASCII码保存到内存中,表示字符0,然后赋值给了b;



清零函数ZeroMemory的使用

void main()
{
	char arr[100]="235a678944";
	ZeroMemory(arr+2,1);//以arr为首地址,地址加1后作为新地址,然后将前5所在的位置清零
	if(arr[0]==50) //字符2的ASCII码值是50;
	{
		cout<<"第一次测试结果如下:"<<endl;
		cout<<"数组内容长度为:"<<strlen(arr)<<endl;
	}
	if(arr[2]==0) //测试是否将5所在的位置清零
	{
		cout<<"第二次测试结果如下:"<<endl;
		cout<<"数组内容长度为:"<<strlen(arr)<<endl;
	}
       if(arr[3]==97)//97作为ASCII码表示字符'a'
	{ 
		cout<<"hello world"<<endl;
	}
        system("PAUSE");
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值