当前位置: 代码迷 >> C语言 >> char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大 ...
  详细解决方案

char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大 ...

热度:798   发布时间:2007-07-31 23:42:58.0
char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大小有关?

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;
}
执行两次得到的结果是相同的。
上次没说清楚。不好意思。

搜索更多相关的解决方案: str  char  printf  空间  地址  

----------------解决方案--------------------------------------------------------
%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进制的地址输出
----------------解决方案--------------------------------------------------------
  相关解决方案