免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6639 | 回复: 5
打印 上一主题 下一主题

问个弱问题,C如何动态申请指针数组呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-11 11:37 |只看该作者 |倒序浏览

  1. int main(int argc, char *argv[])
  2. {
  3.          char *ptr = NULL;
  4.          func(&ptr, int n);   //ptr在func()子程序中动态申请
  5.          .....
  6. }
  7. int func(char **ptr, int n)
  8. {
  9.     char *p = NULL;
  10.      if (!(*ptr = malloc(n * sizeof(char *))))  //ptr首先指向一个指针数组,大小为n,目的是实现char (*ptr)[n]功能
  11.         exit(0);
  12.      现在是下面怎么给数组指针的各个元素赋值呢?
  13.      比如如下申请的内存:
  14.     if (!(p = malloc( SIZE * sizeof(char)))
  15.         exit(0);

  16.     怎样把p的值赋给(*ptr)[i]呢?
  17.     (char *)((*ptr)[i[]) =  p;  //这样对吗???
  18. }
复制代码

还有就是主程序中的指针char *ptr,采用char *能行吗?
(现在我的问题已经解决了,是通在main中将char*ptr改为int *ptr;然后子程序就可以用强制类型转换来赋值了,但是还是想知道是不是char *ptr
这种形式有问题呢?)
DaYuTou 该用户已被删除
2 [报告]
发表于 2007-10-11 12:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2007-10-11 14:51 |只看该作者
原帖由 DaYuTou 于 2007-10-11 12:45 发表
*ptr = malloc(n * sizeof(char *))这句应该是ptr =(char **) malloc(n * sizeof(char *))吧

肯定是错的,这是二级指针

论坛徽章:
0
4 [报告]
发表于 2007-10-11 15:03 |只看该作者
指向指针数组的指针:int * (*p)[];

论坛徽章:
0
5 [报告]
发表于 2007-10-11 16:06 |只看该作者
先理解一下楼主的意图,想申请一个指针数组,数组每个元素是一个char*类型指针,数组元素个数由n传递说明,随后再给数组元素赋值,对吗?

#define SIZE 100
typedef char * (*parray)[];//方便理解

int main()
{
    parray pi= NULL;//pi是个指向char* []数组的指针
    int n = 10;
    func(&pi, n);
    //现在也可以在这里给pi数组元素重新赋值,但如果在func中已赋过,要先释放
    (*pi)[0] = (char *)malloc( SIZE * sizeof(char));//由于pi指向一个char* []数组,数组元素就是(*pi)[]了
    (*pi)[1] = (char *)malloc( SIZE * sizeof(char));
    ....
}

void func(parray *pi, int n)
{
    char **pchar = NULL;
    pchar = (char **)malloc(n*sizeof(char *));//pchar其实就是一个char* []数组
    //现在可以在这里给数组元素赋值
   pchar[0] = (char *)malloc(SIZE * sizeof(char));//或*(p+0)
    pchar[1]  = (char *)malloc(SIZE * sizeof(char))// 或*(p+1)
    ......
   *pi = *(parray *)pchar;//让main中的定义的局部变量pi指向这个char* []数组
    return;
}

不知道我对LZ的意图的需求分析准不准确,后面的详细设计正不正确,请大家指正

[ 本帖最后由 augustusqing 于 2007-10-11 16:08 编辑 ]
DaYuTou 该用户已被删除
6 [报告]
发表于 2007-10-11 17:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP