| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 612 人关注过本帖
标题:[求助] & 与 * 的所关联的动态内存
只看楼主 加入收藏
feelerly
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-5-1
收藏
 问题点数:0 回复次数:8 
[求助] & 与 * 的所关联的动态内存
研究了一段时间的动态内存分配的问题,扯到指针上就有些疑惑了,
比如以下代码:
程序代码:
#include "stdio.h"
int main(void)
{
/*正确代码*/
    char * ch;
    printf( "Input:  ");
    scanf( "%s", &ch);
    printf( "\nOutput:%s",&ch);
    return 0;
}
以上代码是正确的, 我的疑问就是如果将代码改成下面的形式就错了:
[code]
#include "stdio.h"
int main(void)
{
?
/*错误代码*/
    char * ch;
    printf( "Input:  ");
    scanf( "%s", ch);
    printf( "\nOutput:%s",ch);
    return 0;
}
由此, 感觉到, 其实用指针就可以完全代替字符数组实现动态内存分布了.
& 的含义貌似是"内存地址". 按照"正确代码"中的写法, 是不是可以理解为 把所输入的字符串传递给指针 ch 的地址呢? 如果成立的话, 是不是申明一个符指针, 就会自动地动态地给所申明的指针划分内存空间呢? 
搜索更多相关主题的帖子: 内存 动态 
2008-05-13 21:22
hellbelial
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2008-4-29
收藏
得分:0 
你的所谓的正确的代码就是错误的,你试一下输入4个或以上的字符就会发现了。
而且,你这样使用指针是非法的,使用未初始化的指针有可能造成程序崩溃。
2008-05-13 22:17
feelerly
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-5-1
收藏
得分:0 
LS用VC去试试
LS米有试过就别乱说
2008-05-13 22:23
qinxinhai
Rank: 1
来 自:湖南长沙
等 级:新手上路
帖 子:237
专家分:0
注 册:2008-4-27
收藏
得分:0 
楼主,
你自己弄下吧
别说输入几个了
俩个就不行了,
你既然说的是数组,自己就整个数组吧
字符数组本来就是比较特别的

我秀我自己
2008-05-13 22:55
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include "stdio.h"
int main(void)
{
/*正确代码*/
    char * ch;
    printf( "Input:  ");
    scanf( "%s", &ch);
    printf( "\nOutput:%s",&ch);
    return 0;
}
也不能说错吧,只是不太好..
char *ch;是给变量ch分配地址了假如0x0001;&ch时,就是提取出0x0001,从这段地址开始输入字符串

学习需要安静。。海盗要重新来过。。
2008-05-13 23:16
qinxinhai
Rank: 1
来 自:湖南长沙
等 级:新手上路
帖 子:237
专家分:0
注 册:2008-4-27
收藏
得分:0 
换成数组吧
好解释些,这样运行系统会提示错误的

我秀我自己
2008-05-13 23:51
hellbelial
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2008-4-29
收藏
得分:0 
[bo]以下是引用 [un]feelerly[/un] 在 2008-5-13 22:23 的发言:[/bo]

LS用VC去试试
LS米有试过就别乱说

给你截一个图了,我没试过会说出来???

[[it] 本帖最后由 hellbelial 于 2008-5-13 23:54 编辑 [/it]]

00.jpg (35.05 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


01.jpg (13.51 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-05-13 23:52
hellbelial
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2008-4-29
收藏
得分:0 
VC的也就最多可以输入4个而已

00.jpg (33.44 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-05-13 23:59
AlexG
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-5-14
收藏
得分:0 
其实LZ你说的也没有错. 不过我们一般会做防错处理的.
char *ch;
如何刚好内存中分配给ch的地址后面都是空的, 没有别的占用. 满足输入的字符串长度. 就没有什么问题的.
那如果有呢, 就有问题了. 你分配的地址原来有别的数据就有冲突了.
所以我们一般定义数组呢.
uchar Array[10] = {0};
等于让系统给分配了10个uchar的空间了. 这些空间当然都是没有被占用的了.
2008-05-14 00:57
快速回复:[求助] & 与 * 的所关联的动态内存
数据加载中...
 
   



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

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