| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2092 人关注过本帖
标题:char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大 ...
只看楼主 加入收藏
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
结帖率:25%
收藏
 问题点数:0 回复次数:7 
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 空间 地址 
2007-07-31 23:42
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
%p是输出地址,相同是因为后面有足够的空间,重新分的时候就不用copy了,所以就选择了原来的起始地址
2007-07-31 23:52
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
收藏
得分:0 

很抱歉,没明白,不过我会明白的。


2007-08-01 00:17
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 
是输出地址

 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-08-01 00:29
perfume
Rank: 1
等 级:新手上路
帖 子:51
专家分:7
注 册:2007-7-24
收藏
得分:0 
en

2007-08-04 14:15
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 

首地址!!!
include <malloc.h>

char *p;

p = (char * ) malloc (10);

p = (char * ) realloc (p,20);

…………………………

realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节

中获得附加的字节,如果能够满足,自然天下太平;可如果数据后面的字节不够的话,问题就出来了,那么就

使用堆上第一个有足够大小的自由块,现存的数据然后就被拷贝至新的位置,而老块则放回到堆上。这句话传

递的一个重要的信息就是数据可能被移动!


要练习算法就来http:///!!有挑战哦!!
2007-08-04 15:41
leeldy
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2007-8-2
收藏
得分:0 
#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;
}

重新划分内存空间后,地址可能与原地址相同也可能不同,取决于内存存储状况

↑↑↑↑↑↑↑↑如果我错了,请改正我的错误↑↑↑↑↑↑↑↑

2007-08-04 19:12
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
16进制的地址输出

偶是菜鸟鸟偶惧WHO?!!!!
2007-08-04 19:16
快速回复:char *str;……printf("%p",str);是输出地址吗?还是只与str说占空间大 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027001 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved