程序的执行过程:p1=p2=(char *)malloc(sizeof(char)*10);p1和p2都指向同一个字符数组。strcpy(p1,"malloc");此时p1指向的字符数组的内容是"malloc"strcpy(p2,p1+1);因为p1和p2都指向同一个字符数组,此时执行的是p[i]=p[i+1];(i依次为0、1、2...),结果p1指向的字符数组的内容是"alloc",注意到p[0]是字符a(p1[0]和p2[0]都是字符a)。所以,printf("%c%c\n",p1[0],p2[0]);输出的结果是:aa。程序的运行结果也正是如此: