学习小总结2

       最近几天呢,都在忙我的ls,不过还好今天终于完工了。。。

       还是先总结下最近吧,就以倒叙写吧,发现以前讲座中的有些东西自己都不太清楚了,,不过现在超兴奋的,开始喽! 就拿今天讲的字符串与编码,有好多有趣的东西你可能没有发现哦,但是我们今天的讲座里提到了呢。

      No.1、传值与传址

      我个人觉得,这两者既有区别又有联系,区别就是一个传值一个传址;联系呢就是都是值嘛,一个变量本身的值,一个是变量地址的值。就拿一个简单的交换函数swap();解释下吧。


 void swap(int a, int b)
{
     int c;
     c =a;
     a = b;
     b = c;
}

这就是一个典型的传值题型,当其他函数要调用的时候虽然完好的调用了,但是却不能真正交换变量本身的值。而下面这个却可以:

void swp(int  *s1, int  *s2)
{
     int temp;
     temp = *s1;
     *s1 = *s2;
     *s2 = temp;
}
这个也就是一个典型的传址问题,当其他函数调用时,传入的是地址,所以就轻而易举的改变了变量本身的的值。

还有一个问题就是半角字符,其实就是所谓的英文字符,eg: , . ' ' '' '' ! ?,其次呢就是全角字符,就是中文的标点符号啦,eg:, 。 ;?!等等这些,大家都知道在以前GBK编码就是中国汉字的编码。。。


       No.2、关于字符串的种种这般~

       先写几个常用的字符串方面函数的函数原型:

#include <string.h>
int strcmp(const char *dest, const char *str);
char *strcpy(char *dest , const char *str);
char *strcat(char *dest, const char *str);

     这些字符串的链接,拷贝,比较啊神魔的都是可以自己去编写的,但我们编出来的大多要不就是效率差,要不就是考虑得不到位,如果是大数据的话我们这些根本就处理不了,所以还是先看看人家是怎末写的吧。(可以搜一下GNU版的strlen,可以看一下http://www.cnblogs.com/zhaoyl/archive/2012/09/18/2691214.html)


       No.3、C语言代码对结构体的处理~

       先看一个好玩的例子:

struct ab
{
      int a;
      int b;
};
int main()
{
    struct ab array[2];
    array[0].a = 1;
    array[0].b = 2;
    array[1].a = 3;
    array[1].b = 4;

    ((struct ab*)(&(array[0].b)))->b = 0;

    printf("%d ,%d ,%d, %d\n",array[0].a,array[0].b,array[1].a, array[1].b);
}

这个很好玩哦,先猜一下它的结果:1,2,0,4。可是这又是为神魔呢?

原因很简单:就是对array[0].b的地址强制转换了一下,然后array[0].a,array[0].b,的指向就会偏移,用一个图来解释吧

a           b          a          b

1234
             a ’         b’   

图中的b'就是((struct ab *)(&(array[0].b)))->b  <=> b',仅仅只是一个数组名和偏移量造成的这些,呵呵,如果不仔细想想自己也快晕了~~


还有一个好玩的:

#include <stdoi.h>

int main()
{
      int a = 0;
      char *p = (char *)&a;
      p[0] = 0xff;
      p[1] = 0xff;
      p[2] = 0xff;
      p[3] = 0xff;

      printf("%d\n",a);
}
恩恩,聪明的你应该知道答案了吧?   没错,结果就是 : -1.

至于原理嘛,可以自己偷偷的想一下、、、



好啦,以上就是今天讲座学到的东西,虽然看起来不怎末深奥,但是细节问题还是不少哦~快乐的学习,学到的东西才会多嘛。

In my opinion,happy is very important !




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值