char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大小有关?
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char *str;
/* allocate memory for string */
str = malloc(10);
/* copy "Hello" into string */
strcpy(str, "Hello");
printf("String is %s\n Address is %p\n", str, str);
str = realloc(str, 20);
printf("String is %s\n New address is %p\n", str, str);
/* free memory */
free(str);
return 0;
}
执行两次得到的结果是相同的。
上次没说清楚。不好意思。
----------------解决方案--------------------------------------------------------
%p是输出地址,相同是因为后面有足够的空间,重新分的时候就不用copy了,所以就选择了原来的起始地址
----------------解决方案--------------------------------------------------------
很抱歉,没明白,不过我会明白的。
----------------解决方案--------------------------------------------------------
是输出地址
----------------解决方案--------------------------------------------------------
en
----------------解决方案--------------------------------------------------------
首地址!!!
include <malloc.h>
char *p;
p = (char * ) malloc (10);
p = (char * ) realloc (p,20);
…………………………
realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节
中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就
使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。这句话传
递的一个重要的信息就是数据可能被移动!
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <alloc.h>
#include <string.h>
int main(void)
{
char *str;
/*定义字符型指针变量str*/
str = malloc(10);
/*向系统申请10个字节的内存空间,将首地址赋值给str*/
strcpy(str, "Hello");
/*复制字符串"Hello"到以str为首地址的内存空间内*/
printf("String is %s\n Address is %p\n", str, str);
/*显示str所指向内存空间的内容(遇/0结束输出)和str本身地址值*/
str = realloc(str, 20);
/*重新划分str所指内存空间,空间扩展为20字节*/
printf("String is %s\n New address is %p\n", str, str);
/*显示str所指向内存空间的内容(遇/0结束输出)和str本身地址值*/
free(str);
/*释放str所指向的内存空间*/
return 0;
}
重新划分内存空间后,地址可能与原地址相同也可能不同,取决于内存存储状况
----------------解决方案--------------------------------------------------------
16进制的地址输出
----------------解决方案--------------------------------------------------------