当前位置: 代码迷 >> C语言 >> [求助]关于指针的困惑
  详细解决方案

[求助]关于指针的困惑

热度:275   发布时间:2007-08-24 20:15:15.0

哦```原来sizeof是字节的意思啊```

那就明白malloc(5*sizeof(int))的意思了```

但是(int *)还不明白``感觉是定义一个指针参数``



----------------解决方案--------------------------------------------------------
以下是引用死了都要C在2007-8-24 20:06:22的发言:

看不懂```
为什么要在malloc前加(int *)
malloc后面的(5*sizeof(int))是什么意思啊```



以前用malloc申请的空间是void型,需要强制转化成需要的类型,所以要加例如(int *)的东西。
C99规定可以直接写成p=malloc( )的形式。

至于你malloc(5)是指申请5个字节的空间。
写成malloc(5*sizeof(int))的原因是为了移植性高,因为不是所有机子上的int所占的空间都一样的,例如32位机子上一般int是2个字节,而64位机上就是4个字节了。

还有p=malloc(5);是指p指向一块大小为五个字节的内存,不是说他相当于p[5];



----------------解决方案--------------------------------------------------------

以下是引用死了都要C在2007-8-24 20:15:15的发言:

哦```原来sizeof是字节的意思啊```

那就明白malloc(5*sizeof(int))的意思了```

但是(int *)还不明白``感觉是定义一个指针参数``


你声明了int *p;
然后(int *)malloc……
使类型一样呀
所以说你在前面生命的呀……


----------------解决方案--------------------------------------------------------

哦`````那看看我下面的说法对不对```

如果定义的指针是char/float,那么:

#difine N 5

char/float *p=mallco( N*sizeof(char/float) );

这样写没有错吧``

又有一个问题``我们用mallco得到的内存单元是连续的吗?

如果是连续的话```那么 *(p+1) 可以写成 p[1] 吗?




----------------解决方案--------------------------------------------------------

是malloc


----------------解决方案--------------------------------------------------------

应该可以
malloc是动态分配内存


----------------解决方案--------------------------------------------------------
哦``不好意思``刚学的竟然忘了```改下```

char/float *p = (char/floa *)tmallco( N*sizeof(char/float) );

这下应该没什么问题了吧````


----------------解决方案--------------------------------------------------------
晕```怎么多按了一个t```
----------------解决方案--------------------------------------------------------

原型:extern void *malloc(unsigned int num_bytes);

用法:#include <alloc.h>

功能:分配长度为num_bytes字节的内存块

说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。

举例:

// malloc.c

#include <syslib.h>
#include <alloc.h>

main()
{
char *p;

clrscr(); // clear screen

p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");

free(p);

getchar();
return 0;
}


----------------解决方案--------------------------------------------------------
不过malloc的头文件看编译器而定
有的用stdlib.h
有malloc.h
还像如上
用后记得free
----------------解决方案--------------------------------------------------------
  相关解决方案