/* 函数传递指针是传递的指针指向的地址,不是指针本身;
* 如何想操作指针本身,需要使用指向指针的指针;
*/
#include <stdio.h>
#include <stdlib.h>
void AssignSpace(int ** avr ,int size ,int data)
{ int i;
*avr = (int *)malloc(size * sizeof(int));
for(i = 0; i<size;i++)
{
*(*avr+i) = data;
}
}
void AssignSpace_pointer(int *avr , int size ,int data)
{
int i;
avr = (int*)malloc(size * sizeof(int));
for(i=0;i<size;i++)
{
*(avr+i) = data;
}
for(i=0;i<size;i++)
printf("the inner pointer avr[%d] is : %x \n",i,*avr);
}
void main()
{
int* hello = NULL;
int* hello_pointer = NULL;
int i;
AssignSpace(&hello ,5 ,0x24);
AssignSpace_pointer(hello_pointer, 5 ,0x35);
for(i=0;i<5;i++)
printf("the hello data hello[%d] is : %x \n",i,*(hello+i));
if(hello_pointer == NULL)
{
printf("the hello_pointer is NULL\n");
}
else{
for(i=0;i<5;i++)
printf("the hello data hello_pointer[%d] is : %x \n",i,*(hello_pointer+i));
}
}
运行结果:
分析:
AssignSpace_pointer(int *avr , int size ,int data);函数中avr指针只是复制hello_pointer指向的地址;当在函数中操作avr时,只是操作局部变量avr,并不会改变hello_pointer指针;