Chinaunix首页 | 论坛 | 博客
  • 博客访问: 708717
  • 博文数量: 161
  • 博客积分: 2998
  • 博客等级: 少校
  • 技术积分: 1697
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-28 09:39
文章分类

全部博文(161)

文章存档

2012年(6)

2011年(120)

2010年(35)

分类: LINUX

2011-05-05 19:29:00

有两个方法:
1.用return的方法
char *GetMemory(char * p, int num)
{
     p = (char *)malloc(num*sizeof(char));
     return p;
}
int main()
{
    char *str = NULL;
    str  =  GetMemory(str, 10);
    strcpy(str, "hello");
    free(str);
    return 0;
}
 
2.用二级指针
void GetMemory(char **p, int num)
{
   * p = (char *)malloc(num * sizeof(char));
}
 
int main()
{
   char *str = NULL;
   GetMemory(&str, 10);
   strcpy(str, "hello");
   free(str);
   return 0;
}
 
下面是关于二维数组形参实参的一些替代
数组参数                                   等效的指针参数
数组的数组:char a[3][4]                   数组的指针:char (*p)[4]   (char a[][4]后面的不能删掉,也就是每次+1时,其所移动的大小)
指针数组:char *a[5]                       指针的指针:char **p
 
C语言中,当一维数组作为函数参数的时候,编译器总是把它解析成为一个指向其首元素首地址的指针,这条规则不是递归的,只有一维数组才这样,当数组超过一维时,将第一维改写为指向数组首元素首地址的指针后,后面的维也不可改写,如:a[3][4][5]作为参数时可以改写为(*p)[4][5].
阅读(3276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~