C指针(4):指针传递和返回数据

指针传递和返回数据

1.交换数据

//实际参数发生改变
void swapWithPointers(int* pnum1,int* pnum2)
{
    int tmp;
    tmp = *pnum1;
    *pnum1 = *pnum2;
    *pnum2 = tmp;
}

//实际参数不发生改变
void swap(int numl,int num2)
{
    int tmp;
    tmp=num1;
    numl=num2;
    num2=tmp;
}

2.返回指针

int* allocateArray(int size,int value)
{
    int* arr=(int*)malloc(size * sizeof(int)); 
    for(inti=0;i

3.局部数据指针

int* allocateArray(int size,int value)
{
    int arr[size]; 
    for(int i=0;i

4.传递指针的指针

void allocateArray(int **arr,int size,int value)
{
    *arr=(int*)malloc(size * sizeof(int)); 
    if(*arr!=NULL){
        for(inti=0;i
//只传递一个指针不会起作用
void allocateArray(int *arr,int size,int value)
{
    arr=(int*)malloc(size * sizeof(int)); 
         if(arr!=NULL){
             for(inti=0;i

5.自定义free函数

void saferFree(void **pp){
    if(pp!=NULL && *pp!=NULL){
        free(*pp);
        *pp=NULL;
    }
}

//宏定义,省去了函数使用者做类型转换和传递指针的地址
#define safeFree(p)saferFree((void*)&(p))

int main() {
    int *pi;
    pi = (int*) malloc(sizeof(int));
    *pi = 5;
    printf("Before: %p\n",pi);
    safeFree(pi);
    printf("After: %p\n",pi);
    safeFree(pi);
    return (EXIT_SUCCESS);
}
//假设malloc返回的内存位于地址1000,那么这段代码的输出是1000和0。第二次调用safeFree宏给它传递NULL值不会导致程序终止,因为saferFree函数检测到这种情况并忽略了这个操作

你可能感兴趣的:(C指针(4):指针传递和返回数据)