容易忽略 -- 函数传递的指针是数据的地址,不是指针本身

/* 函数传递指针是传递的指针指向的地址,不是指针本身;
 * 如何想操作指针本身,需要使用指向指针的指针;
 */

#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指针;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamStreaking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值