| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1759 人关注过本帖
标题:咨询字符型指针或整形指针在定义后分配内存空间的问题
只看楼主 加入收藏
cuijingchun
Rank: 3Rank: 3
来 自:黑龙江
等 级:论坛游侠
威 望:1
帖 子:108
专家分:186
注 册:2011-9-28
收藏
得分:0 
以下是引用zaixuexi在2012-1-10 23:07:03的发言:

什么叫没有分配内存?是指针指向了无效的地址空间,malloc也只是返回了一片地址空间的首地址,和这个指针本身无关,指针本身在栈上的地址还是要被释放的,懂?
是不是这么理解:
 char* a;  a这个指针变量,已经在栈里分配一个 4个字节,但是个空指针,没有初始化或付值,

为自己喜欢游戏做一个自动打怪的程序QQ: 7325231    YY4350晚上编程课欢迎大家来听
2012-01-11 07:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2012-01-11 14:55
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
很感谢楼上几位详细的讲解。基本上有个整体的认识了,很感谢楼上几位,真的。刚吃完饭。
我觉得用下面一个小程序就能说明我对这节的几点认识了
#include"stdio.h"
#include"malloc.h"
int main(){
    char *a;
    a=(char *)malloc(0);//malloc里的参数是分配的内存大小,这里默认为0,malloc的作用是在内存中为指针a分配一个指向内存空间的合法指针,
      gets(a);          //只不过分配的是空内存 。指针在就行运算的时候要进行初始化,可通过数组,malloc等等方式。
     printf("%s",a);
    free( a );
}


认为事物非黑即白是缺智慧的表现……
2012-01-11 19:52
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
结贴了噢

认为事物非黑即白是缺智慧的表现……
2012-01-15 19:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 12楼 TonyDeng
#include  <stdio.h>

int   main(void)

{
    int  *p = NULL;   //如果改写成 int  *p; 没有初始化是不是就很危险?但是看到n多代码都在干这营生

    int   a = 1;

    p = &a;         // 这个相当于赋值应该和初始化么关系吧

    printf("%d\n", *p);

    return  0;
}

梅尚程荀
马谭杨奚







                                                       
2012-01-15 19:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 15楼 有容就大
你仔細看看12樓的資料是怎麼說的。指針必須初始化,是在使用它進行操作之前必須有明確的指向。所謂操作,就是對指針所指向的對象進行讀或寫。p=&a是把指針指向a的地址,這裡沒有對指針所指向的東西進行讀或寫。a=*p,是讀;*p=a,是寫。這兩種操作就叫對指針的“引用”,在沒有初始化的時候,禁止這種引用。p=NULL,你試試*p=1或a=*p,看有什麼反應。

在聲明時int* p=&a,與int* p然後p=&a,其實是同一個動作。這種叫“複製初始化”,是通過賦值進行的,前面那種表面看起來是一步,但其實是兩步操作。在C++中,將會涉及另外一種初始化概念,是用int i(0)這樣的語法,這種不用賦值。C++會很強調這種初始化與賦值初始化的區別,但C不會。

[ 本帖最后由 TonyDeng 于 2012-1-15 20:08 编辑 ]

授人以渔,不授人以鱼。
2012-01-15 20:06
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
初不初始化无所谓的,用的时候知道指向哪里就可以

技术问题,请不要以短消息方式提问
2012-01-16 09:50
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 16楼 TonyDeng
也就是说
int *p;
 
p = &a;  就相当于初始化了。只要在读写之前知道指针的明确指向就是合法的。 试过int *p;

                                                                            *p = 1;程序是无法进行的.

梅尚程荀
马谭杨奚







                                                       
2012-01-16 10:14
快速回复:咨询字符型指针或整形指针在定义后分配内存空间的问题
数据加载中...
 
   



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

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