Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264869
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 277
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-09 10:57
文章分类

全部博文(52)

文章存档

2016年(52)

我的朋友

分类: LINUX

2016-09-29 12:56:33

        这篇文章除了会说一些C中的 "\0" 问题,还会说一些常用的东西。

        1.在不使用第三个变量的情况下,交换两个变量的值
        
            方法一:   int a,b    a=a+b;  b=a-b;  a=a-b;
            方法二:   int a,b    a=a^b;  b=a^b; a=b^a;

        2. "\0"问题:
        
                            

        运行结果如下:

                            

        由以上结果可以看出 char str[]="abcde" 的大小为6,可见 " \0 "是自动加进去的,因为是以字符串的形式赋值的。这个要记住。 sizeof(str)求得是整个数组的大小。因为char为1个字节,所以为6,而int instr[10],因为int为4个字节,所以为4 x 10 = 40,而当char szstr[10],即指定数组的大小时,不管数组中有几个元素,sizeof(szstr)总为10(此处为 char 类型,int类型则为40)。函数strlen()算长度是不加 "\0". 还有就是int a=2 时 sizeof(2) 和sizeof(a)是一样的。而sizeof int 则是不对的,不能这样用。我们只需要记着sizeof是把括号加上就可以啦。

        下面接着测试strlen()遇 "\0"的情况和给指针赋值的情况:
        
                        

        运行结果如下:

                        

        从上面的结果可以看出,当给一个字符数组单个赋值时(未指明数组的大小),即用{}号的形式时,数组的大小就是数组中元素个数的大小,此时是不自动加 "\0"的。strlen(a)=2是因为strlen()遇 \0 结束。sizeof(str) = 5是因为str的存储数据为 { ‘1’,‘2’,‘\034', '\0', '\0'}因为是以字符串的形式赋值的,所以自动加的 \0,而此处的 \034 为 一个字符,它代表的是ASCII值的八进制为”\034“的字符。这个需要切记!类似的还有十六进制的。 

        注意:sizeof如用于数组,只能测出静态数组的大小,无法检测出动态分配的或者是外部数组的大小。当数组做参数时,数组名是当作指针使用的。例如:void fun (char str[])  此时sizeof(str) = 4的。

        下面再测一下笔试中经常出现的问题:
        1.指针指向的常量(未加const的),如下图:
                            
       
           运行结果如下图:
                            
                            

        出现段错误的原因是因为 "AAA"是一个字符串常量,等同于const  char *p = "AAA"  p所指向的地址的值是不能被改变的,而p[0]却试图去改变它,所以会出现段错误,但p所指向的地址是可变得,如下图:

                            

        运行结果如下:
                            
                            

        下面的也是经常出现的笔试题:指针分配的空间的问题
    
                            

        运行结果如下图:

                            
        
        因为str无空间,指针在使用时一定要初始化,初始化为空也可以,因为如果不初始化则可能会出现内存的越界访问问题。而用strcpy时指针的空间一定要够用!

        还有几个函数 是关于 \0 的问题,回来再补,嘿嘿!


         
阅读(4975) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~