堆上
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
int main(){
char* s1=malloc(5*sizeof(char));
memcpy(s1,"abcd",5);
char* s2=s1+3;
memcpy(s2,"efgh",5);
printf("%s@%p\n%s@%p\n",s1,s1,s2,s2);
free(s1);
free(s2);
return 0;
}

结果:
D:\Codes\test>a
abcefgh@00000000001B13D0
efgh@00000000001B13D3
栈上
#include <stdio.h>
int main(){
char* s1="abcd";
char* s2=s1+3;
s2="efgh";//s2覆盖了s1+3的值
printf("%s@%p\n%s@%p\n",s1,s1,s2,s2);
return 0;
}
结果:
D:\Codes\test>a
abcd@0000000000404030
efgh@0000000000404035
网友评论