二级指针

1.回顾一级指针:指向一个普通变量的内存区

  eg: 

1        int a =250;2     int *p = &a;//p保存着a变量的首地址
3     printf("a的首地址是%p\n",p);
4     printf("a的值是%d\n",*p);            

2.二级指针定义:指向一级指针的指针,也就是存放着一级指针变量的地址。语法格式:数据类型 **二级指针变量名 = 一级指针地址;

eg:

int a = 250;
int *p = &a;
int **pp = &p;
printf("p的地址是%p,a的地址是%p,a的变量是%d\n",pp,*pp,**pp);

 

 

 

 

 

#include<stdio.h>
int main(void)
 {
        int a = 250;
        int *p = &a;
        int **p = &p;
        printf("p的地址是%p,a的地址是%p,a的值是%d\n",pp,*pp,**pp);
     **pp = 350;
 
    printf("p的地址是%p,a的地址是%p,a的值是%d\n",pp,*pp,**pp);
    return 0;  }

 3.二级指针处理普通变量多余,用一级指针即可。可用来处理字符串,经典笔试题:编写一个函数实现两个字符串的交换。

eg:

  char *pa = "hello";

  char *pb = "world";

目标:pa -> "world",pb -> "hello",指针互换

注意:通过pa和pb指针是无法修改字符串的值

#include<stdio.h>
//定义指针交换函数swap
void swap(char *p1,char *p2)
{
    char *p3 = p1;
    p1 = p2;
    p2 = p3;      
}
//做不到交换

int main(void)
{
    char *pa = "hello";
    char *pb = "world";
    swap(pa,pb);
    printf("%s %s\n",pa,pb);  
    return 0;
}

#include<stdio.h>
//定义指针交换函数swap
void swap1(char **p1,char **p2)
{
    char *p3 = *p1;
    *p1 = *p2;
    *p2 = p3;      
}
//可以交换

int main(void)
{
    char *pa = "hello";
    char *pb = "world";
    swap1(&pa,&pb);
    printf("%s %s\n",pa,pb);  
    return 0;
}

 

posted @ 2021-01-28 15:25  盾牌座UY  阅读(630)  评论(0)    收藏  举报