c语言指针和地址的概念 二级指针的三种应用场合

二级指针是一个指向指针的指针当需要通过函数来修改主调函数内的一级指针(对一个一级指针产生副作用)时,可以在被调函数的参数中使用一个二级指针,由这个二级指针来指向主调函数内的一级指针,接下来我们就来聊聊关于c语言指针和地址的概念 二级指针的三种应用场合?以下内容大家不妨参考一二希望能帮到您!

c语言指针和地址的概念 二级指针的三种应用场合

c语言指针和地址的概念 二级指针的三种应用场合

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

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

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

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

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

#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("- ",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-

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页