Dal*_*eme -1 c c++ malloc pointers char
我明白如果我有以下内容:
char* c1 = "apple";
char* c2 = "apple";
Run Code Online (Sandbox Code Playgroud)
然后这两个char*可以具有完全相同的内存地址.但如果我有以下内容怎么办:
char* c1 = (char*)malloc(sizeof(char)*10);
memset(c1, 0, 10);
c1[0]='a';c1[0]='p';c1[0]='p';c1[0]='l';c1[0]='e';
char* c2 = (char*)malloc(sizeof(char)*10);
memset(c1, 0, 10);
c2[0]='a';c2[0]='p';c2[0]='p';c2[0]='l';c2[0]='e';
Run Code Online (Sandbox Code Playgroud)
即使在这种情况下,c1和c2是否可能具有相同的地址?
实际上在第一种情况下,其中c1和c2都是字符串文字的指针:
char* c1 = "apple";
char* c2 = "apple";
Run Code Online (Sandbox Code Playgroud)
是否c1与c2具有相同的值是不确定的.换句话说,他们可能或可能没有相同的地址.
在第二种情况下,只有两次调用失败时,唯一可能的c1并且c2具有相同的值malloc,在这种情况下它们都是空指针.否则,它们将具有不同的值.
这就是你应该检查返回值的原因malloc.
的malloc将返回唯一地址或NULL的c1和c2,因此,除非malloc的两个失败的值会有所不同.除了NULL情况之外,malloc没有办法神奇地为相同的值返回相同的地址.
但是,你当然可以说:
c2 = c1;
Run Code Online (Sandbox Code Playgroud)
并且c2会将内存中的相同位置称为c1.