C語言筆記15--二級指標
阿新 • • 發佈:2018-12-10
二級指標儲存一級指標的地址,二級指標可以修改一級指標指向的內容,兩者就像是上下級的關係。指標的有著多種變化,在陣列、函式中都有著巨大的作用。 二級指標最大的特點就是有兩個**,定義一個二級指標: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");
}
使用指標最大的麻煩是指標的型別,型別不一致就會出先各種錯誤。當指標的級數越來越多,就會變得難以理解。