指针的运用

以下是小弟的一些愚见,如有不对的地方,请指正,谢谢

错误的方法:#include "stdio.h"

void f(unsigned char *i) //这样写只能传递值,无法修改指针指向的单元,参数传递都是值传递,函数内对形参的修改,实参是看不到的。

{
FILE *fp3;
fp3 = fopen("c://test2.txt","rb+");
fseek(fp3,0,SEEK_SET);
i = (unsigned char *)malloc(5);
fread(i,5,1,fp3);
}

main ()
{
FILE *fp;
unsigned char *t;

fp = fopen("c://test1.txt","wb+");
f(t); //传递了t的值,无法实现目的
fwrite(t,5,1,fp);
exit(1);

}

正确的解法 :指针的运用

#include "stdio.h"

void f(unsigned char **i) // 第一个*,是指形参是一个指针,因为函数中需要把它做为一个指针;第二个*,是指参数i是地址,加*对其地址内存操作;
{
FILE *fp3;
fp3 = fopen("c://test2.txt","rb+");
fseek(fp3,0,SEEK_SET);
*i = (unsigned char *)malloc(5); //修改指针t指向新的单元
fread(*i,5,1,fp3);
}

main ()
{
FILE *fp;
unsigned char *t = 0;

fp = fopen("c://test1.txt","wb+");
f(&t); //传递了指针t的地址,可实现修改t地址内存的内容,即修改指针指向的单元
fwrite(t,5,1,fp);
exit(1);
free(t);
}

你可能感兴趣的:(指针)