1. 程式人生 > >C語言筆記15--二級指標

C語言筆記15--二級指標

二級指標儲存一級指標的地址,二級指標可以修改一級指標指向的內容,兩者就像是上下級的關係。指標的有著多種變化,在陣列、函式中都有著巨大的作用。 二級指標最大的特點就是有兩個**,定義一個二級指標:int **p; 1.二級指標改變變數的值

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a=10;
    int *p=&a;
    int **pp=&p;//二級指標有兩個**
    printf("a=%d\n",a);
    **pp=20;//二級指標直接修改一級指標指向的值
    printf
("a=%d\n",a); printf("a=%d\n",*p); system("pause"); }

這裡寫圖片描述 由結果可以知道,即使一級指標p沒有進行修改變數的值,只要二級指標修改了,變數的值也會發生改變。 2.改變一級指標指向的地址

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a=10;
    int b=20;
    int *p=&a;
    int **pp=&p;//二級指標有兩個**
    printf("*p=%d\n",*p);
    *pp
=&b;//修改一級指向的地址 printf("*p=%d\n",*p); system("pause"); }

這裡寫圖片描述 二級指標改變了一級指標指向的地址。 3.二級指標遍歷指標陣列

#include<stdio.h>
#include<stdlib.h>
void main()
{
    char *a[] = { "lwj", "jib", "hehe", "jiuzhe", "ffff" };
    int len=(sizeof(a)/sizeof(char *));//求陣列長度
    for(char **p=a;p<a+len;p++)//a為指標,需要二級指標遍歷
{ printf("%s\n",p); } system("pause"); }

這裡寫圖片描述 4.二級函式指標改變一級函式指標 函式定義:int add(); 函式指標定義:int (*p)();//把函式名去掉,再把指標名填上。 下面寫一個用二級函式指標改變一級函式指標指向的函式。開始一級函式指標先指向加函式,用二級函式指標讓一級函式指標指向減函式。

#include<stdio.h>
#include<stdlib.h>
int add(int a,int b)//加函式
{
    return a+b;
}
int sub(int a,int b)//減函式
{
    return a-b;
}
//改變函式指標指向的函式
void change_fun(int (**pp)(int,int))
{
    *pp=sub;//*pp就是一級函式指標指向的函式地址
}
void main()
{
    int a=20,b=10;
    int(*p)(int,int)=add;//函式名就是函式的地址
    printf("result=%d\n",p(a,b));//呼叫p指向的函式
    change_fun(&p);//傳入函式指標的地址
    printf("result=%d\n",p(a,b));//呼叫p指向的函式
    system("pause");
}

這裡寫圖片描述 使用指標最大的麻煩是指標的型別,型別不一致就會出先各種錯誤。當指標的級數越來越多,就會變得難以理解。