C语言 指针相关问题--调用函数实现空间动态申请
2011-04-15 16:43
597 查看
下面程序功能申请一块空间有什么问题?(为了简化篇幅,省略malloc是否分配成功的处理)
void getspace(char *pi)
{
pi = (char*)malloc(10*sizeof(int));
}
int main()
{
int i = 0;
char *p = NULL;
getspace (p);
for(i = 0;i<10;i++)
p[i] = i;
}
可以理解主函数中的指针p与getspace当中的指针pi属于同级变量,与普通同级实参变量a和形参ai是的形实传递时一样的道理。ai只是a的一个复制,是用a的值对ai进行赋值,对ai的操作不会影响到a。同理,pi只是p的一个拷贝,p和pi代表的是不同的地址,对pi的操作也不回影响到p的值,不涉及地址的间接访问问题。
如果想要实现上述目的,可以用如下的方法:
void GetSpace(char **p)
{
*p=(char *)malloc(20*sizeof(char));
}
void main()
{
int i;
char *p;
GetSpace(&p);
for(i=0;i<20;i++)
{
p[i]=i;
printf("%-4d",p[i]);
}
}
void getspace(char *pi)
{
pi = (char*)malloc(10*sizeof(int));
}
int main()
{
int i = 0;
char *p = NULL;
getspace (p);
for(i = 0;i<10;i++)
p[i] = i;
}
可以理解主函数中的指针p与getspace当中的指针pi属于同级变量,与普通同级实参变量a和形参ai是的形实传递时一样的道理。ai只是a的一个复制,是用a的值对ai进行赋值,对ai的操作不会影响到a。同理,pi只是p的一个拷贝,p和pi代表的是不同的地址,对pi的操作也不回影响到p的值,不涉及地址的间接访问问题。
如果想要实现上述目的,可以用如下的方法:
void GetSpace(char **p)
{
*p=(char *)malloc(20*sizeof(char));
}
void main()
{
int i;
char *p;
GetSpace(&p);
for(i=0;i<20;i++)
{
p[i]=i;
printf("%-4d",p[i]);
}
}
相关文章推荐
- C语言指针作为形参动态申请空间
- 二维指针——改变动态申请的空间大小
- 二维指针——改变动态申请的空间大小
- 走进C++程序世界-----指针(动态申请空间和释放空间)
- 第6周项目3人数不定的工资类(用指针实现动态分配空间)
- 关于用函数指针参数申请动态内存的问题
- 栈的c语言顺序实现(动态申请空间)
- C语言中指针占据内存空间问题
- C语言实现栈,对栈初始化的指针有关问题
- 【经典面试题】有关指针、内存空间如何申请调用的问题
- 【C/C++开发】C语言 DLL(动态链接库)中申请动态内存释放的问题
- 动态顺序表的相关功能——C语言实现
- C语言中指针占据内存空间问题
- 指针动态申请内存的问题
- C语言中指针占据内存空间问题
- C语言——通过调用函数改变形参指针 改变实参指针问题
- 二维数组动态申请空间以及二维数组函数传参问题
- C语言中与指针相关问题——论数组名和数组名取地址的关系
- C语言如何动态申请空间(一维和二维)
- C语言——通过调用函数改变形参指针 改变实参指针问题