1. 程式人生 > >【C】指標的個人體會!!!

【C】指標的個人體會!!!

指標是c語言的重要部分,也是c語言的魅力所在。

  首先指標是一個可以儲存地址的變數,是要找到一個地址就可以幹很多事情。比如:int  a = 10;這是一個整形變數a,那麼a就有一個對應的地址

普通指標:

        如果要定義一個指標可以儲存a的地址,那麼就可以int* p = &a;這樣就可以將a的地址儲存到指標變數裡面,如果要對a的值進行修改就可以*p = ?進行修改。

對於char、float、bouble等型別可以同樣的進行使用!

陣列指標:

        指標出來可以對一般的變數進行修改,對於陣列同樣也是可以的,例如:int arr[] = {1,2,3,4,5,6,7,8,9};現在我們需要一個指標變數可以儲存一個數組的地址,

我們都知道指標變數都有自己的型別,int型的變數就需要一個int型的指標變數來進行儲存,一個數組有該如何儲存,首先這個變數是一個指標而且每個元素

都是int型的,所以變數的型別就應該是int *,其次這個指標是指向一個數組如果是int *p[],那麼p就會先和[]結合,這樣就是一個指標陣列,他的每一個元素都是int *,但是我們

需要的是一個可以儲存陣列的指標,應該是這樣的int (*p)[] = &arr;這樣p就會先和*結合,使其成為一個指標,指向一個數組,陣列的每個元素都是int型。

指標陣列:

      指標陣列的重點是一個數組,每個元素都是指標。比如:int*arr[] = {&a,&b,&c};這樣就定義好了一個指標陣列。arr先和[]結合使其成為一個數組,每個元素都是int*型別的。

函式指標:

     函式的建立實在棧空間上的,那麼函式也應該有自己的地址,定義一個可以儲存函式地主的變數又該如何建立呢?首先函式指標變數需要一個型別,比如void  (*p)(void*,void*)這樣就建立好了一個函式指標,這個指標可以指向一個引數型別為void*和void*,返回值為void型別的函式。

函式指標陣列

     這句話的重點是陣列,陣列的每個元素是函式指標,同樣這個變數也需要一個型別,例如:先是函式引數型別(void*,void*)再下來是返回型別void,所以這個函式的型別就是void  (*[])(void *,void*),定義一個指標陣列的話就可以這樣void (*p[])(viod*,void*) = {&a,&b,&c,...}。

指向函式指標陣列的指標

     首先分析一下這個指標的目的,首先是一個可以指向函式指標陣列,其次它是一個指標。這個指標的型別是例如:void (*(*)[])(void *,void *),定義一個指向函式指標陣列的指標void (*(*p)[])(void*,void*),p先和*結合——p是一個指標變數,(*p)再和void (*[])(void*,void*)———Pp是一個可以指向一個函式指標陣列,每個函式指標可以指向一個void*,void*型別的引數,返回值為void型別的函式。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void test(int x)
{
	printf("hehe\n");
}
int main()
{
	int i = 0;
	int *p = &i;     //定義一個指向整形變數的指標
	int *pa[] = {&i};//定義一個整形指標的指標陣列
	int (*pp)[] = pa;//定義一個整形指標陣列的指標
    void (*p)(void*,void*) = test;//定義一個可以指向引數為void*,void*型別返回值為void型別的
	void (*(*p)[])(void*,void*) = {p};//定義一個可以指向一個指向引數為void*,void*
	                                   //返回值為void型別的函式指標陣列
	return 0;
}