[二级c的公共基础知识]C|二级指针的三种应用场合

2022-08-25 08:56:13 阅读()公共基础知识
推荐题库

C|二级指针的三种应用场合

二级指针是一个指向指针的指针。

当需要通过函数来修改主调函数内的一级指针(对一个一级指针产生副作用)时,可以在被调函数的参数中使用一个二级指针,由这个二级指针来指向主调函数内的一级指针。

当需要返回一个动态二维数组时,可以通过一个二级指针来指向一个动态一维指针数组,再由一维指针数组内的每一个指针指向一个一维动态数组,形成一个动态二维数组。

当需要通过函数来修改主调函数内的指针数组(对一个指针数组产生副作用)时,可以在被调函数的参数中使用一个二级指针,由这个二级指针来指向主调函数内的指针数组元素(一级指针,数组名为在一定的上下文中为指向数组首元素的具有常量性质的指针)。

1 单链表操作(当需要修改链表表头时):

# 二级c的公共基础知识include <stdio.h>
#include <malloc.h>

struct Node{
    int data;
    struct Node *next;
};

void listInsert(struct Node **head,int data)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;
    if(*head!=NULL)
        newNode->next = *head;  
    *head = newNode;// 头节点为实节点
}
void listPrint(struct Node *head)
{
    while(head!=NULL)
    {
        printf("%d ",head->data);
        head = head->next;
    }
    printf("\n");
}
void listDel(struct Node *head); // 略

int main()
{
    struct Node *head = NULL;
    for(int i=1;i<11;i++)
        listInsert(&head,i);
    listPrint(head);
    getchar();
}

2 返回动态二维数组

#include <stdio.h>
#include <malloc.h>

int ** retArr2D(int r,int c){
    int ** arr = (int**)malloc(sizeof(int*)*r);
    for(int i=0;i<r;i++)
    {
        arr[i] = (int*)malloc(sizeof( int)*c);
    }
    return arr;
}

int main()
{
    int i,j;
    int r=3,c=4;
    int **arr = retArr2D(r,c);
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
            arr[i][j] = (i+1)*(j+1);
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
            printf("%2d ",arr[i][j]);
        printf("\n");
    }
    getchar();
}

3 操作指针数组

#include <stdio.h>
#include <string.h>

void sort(char **states,int n) // char*states[]
{
    char *pt;
    int i,j,k;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(states[k],states[j])>0)
                k=j;
            if(k!=i)
            {
                pt=states[i];
                states[i]=states[k];
                states[k]=pt;
            }
    }
}
void print(char *states[],int n)
{
    int i;
    for (i=0;i<n;i++)
        printf("%s\n",states[i]);
}
int main()
{
    char *states[]={ "CHINA","AMERICA","AUSTRALIA","FRANCE","GERMAN"};
    int n=5;
    sort(states,n);
    print(states,n);
    getchar();
}

-End-




事业单位考试网(sydw.cn)发布·(2022-08-25 08:56:13)


扫一扫,手机继续看
    特别声明:文章多为事业单位考试(sydw.cn)转载,如有侵权请联系!
    部分数据为事业单位考试网(www.sydw.cn)收集整理,转载或复制请注明出处!-事业单位考试网-