码迷,mamicode.com
首页 > 其他好文 > 详细

自加运算符有时会出乎你的意料!

时间:2015-10-02 14:48:14      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

  自加运算符在C语言中是非常常用的一种运算符,每个C程序中几乎除了#就是它了。但就是这么常用的,很多人用起来都很熟练的一个运算符可能会出一些出乎很多人意料的情况,而且在这种问题出来的时候很多人还根本不会意识到是X++除了毛病。

  在完成数据结构的作业时,我敲了一个关于串运算的代码,在使用指针的时候我用了一下自加运算符然后就出错了。以下是简化的代码,去掉了与问题无关的部分。

#include<stdio.h>
#include<stdlib.h>
void main(){
    void connect(char **T,char *s1);
    char *s,s1[20];
    gets(s1);
    connect(&s,s1);
}

void connect(char **T,char *s1){
    int i,L1; char *s;
    for(L1=0;*(s1+L1);L1++);
    *T=(char *)malloc(L1+1);
    s=*T;//保存头指针待用
    for(i=0;*s1;i++,*T++,s1++){
        printf("%x  %x  %x\n",(s+i),*T,s1);
        **T=*s1;
    }
}

这段代码是没法完整运算的,我只能以调试的状态下运行,里面的for循环运行了三次,就会出现如图的结果。printf打印的是地址的跟踪情况。

技术分享

但说实话,我也只是发现了这种情况,并不知道真正的原因在哪。因为我没学过汇编,所以C编译后到底出现了怎样的情况我也不知道,我仅仅知道这个可能跟二重指针有关,希望能有高手指点一下问题所在。

自加运算符有时会出乎你的意料!

标签:

原文地址:http://www.cnblogs.com/CaiNiaoShuo/p/4852169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!