以下三个实现都是用来通过全局变量serverIP, 在mycalloc()分配内存并附值, 最后再在主函数中显示!!
////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *serverIP = NULL;
void mycalloc( char **s )
/*二级指针, 此时s指向serverIP的地址, 对(*s)的操作就等于对serverIP的操作, 即( *s == serverIP )*/
{
char buff[] = "daniel";
int len = strlen( buff );
*s = (char *)malloc( 10 );
strncpy( *s, buff, len );
(*s)[len] = '\0';
return;
}
int main( void )
{
mycalloc( &serverIP ); //传递变量serverIP的地址
printf( "%s\n", serverIP );
free( serverIP );
return 0;
}
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *serverIP = NULL;
char *mycalloc()
{
char *index;
char buff[] = "daniel";
int len = strlen( buff );
index = (char *)calloc( 1, 10 );
strncpy( index, buff, len );
index[len] = '\0';
return index; //返回指针
}
int main( void )
{
serverIP = mycalloc(); //复制返回指针
printf( "%s\n", serverIP );
free( serverIP );
return 0;
}
/////////////////////////////////////////////////////
/////////////////////////////////////////////////////
/*
直接以指针做参数( void mycalloc( char *s) ),在调用函数时参数将是这个指针的一个拷贝
(一个临时变量),在函数中对指针(s)的所有操作,都是对这个临时变量的操作,而当函
数退出后,这个临时变量也将死亡,因此原来的指针所指的内容其实什么也没变。而当参
数是引用时( void mycalloc( char* &s ) ),就不会生成临时变量了,在函数中对指针(s)
的所有的操作都相当于是在原来的指针上的操作.
*/
#include <stdio.h>
char *serverIP = NULL;
void mycalloc( char* &s ) //参数引用
{
char buff[] = "daniel";
int len = strlen( buff );
s = (char *)calloc( 1, 10 );
strncpy( s, buff, len );
s[len] = '\0';
return;
}
int main( void )
{
mycalloc( serverIP );
printf( "%s\n", serverIP );
free( serverIP );
return 0;
}
/////////////////////////////////////////////////////