变量放在双等号的右边,常量放在左边,结果出现了这个样子的东西,然后我就傻眼了。*p++=*q++,这一篇下面的程序会出现错误,因为这样指针p的地址早都变化(*p++),这个指针成为野指针了,对于指针q也是如此。

    

#include <stdio.h>

int main(int argc,char *argv[])
{
int i = 1;
int j = 2;
int *p = &i;
int *q = &j;

// *p++ = *q++; 因为是指针所以可以这样操作

//i++ = j++; 错误,等号的左边是常量
*p++;
*q++;
*p = *q;
//*p++;
//*q++;
printf("i = %d\n",i);
printf("*p = %d\n",*p);
printf("j = %d\n",j);
printf("*q = %d\n",*q);

return 0;
}


*p++=*q++的分布写下来是这个样子


*q++;

*p++;

*p=*q;


*p++=*q++用到下面的程序才算真正的用改用的地方,可以简化程序,

#include <stdio.h>

void *escape(char *dest_str,char *src_str)
{
char *pstr_1 = dest_str;
char *pstr_2 = src_str;

while(*pstr_2)
{
if(*pstr_2 == '\n')
{
*pstr_1++ = '\\';
*pstr_1++ = 'n';
}else if(*pstr_2 == '\t'){

*pstr_1++ = '\\';
*pstr_1++ = 't';
}else{
*pstr_1++ = *pstr_2;
//*pstr_1++ = *pstr_2++;如果写成个样子,上面的if else if后面都要加pstr2++,太复杂
//于是把pstr2++提出去了
}
pstr_2++;
}

}

int main(int argc,char *argv[])
{
char *src_str = "hello\n,\tworld\n";
char dest_str[100] = {0};


printf("before =%s\n",src_str);
escape(dest_str,src_str);

//print dest_str
printf("after = %s\n",dest_str);

return 0;
}


这个程序的功能就是对出现的 \n 和 \t 不转义,按照原生字符串打印出来