1. 程式人生 > >c語言常見的幾種指標用法

c語言常見的幾種指標用法

 1、指標指向變數:

下面有這樣一個程式碼塊:

#include <stdio.h>
void test(int x,int y)
{
	int tmp;
	tmp=x;
	x=y;
	y=tmp;
}
int main()
{
	int a=10;
	int b=15;
	test(a,b);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}

最後輸出的結果還是a=10,b=15。因為在函式呼叫時,實參和形參之間只是值傳遞。但我們使用指標結果就不一樣了,如:

#include <stdio.h>
void test(int *x,int *y)
{
	int tmp;
	tmp = *x;
	*x = *y;
	*y = tmp;
}
int main()
{
	int a = 10;
	int b = 15;
	test(&a,&b);
	printf("a=%d,b=%d\n",a,b);
	return 0;
}
輸出結果a=15,b=10。變數a和b的值發生了交換。這是因為我們利用指標訪問變數的儲存單元,間接修改變數的值。
2、指標指向陣列:

定義一個數組並初始化,int array[5]={2,5,12,7,8},定義一個指標變數並把陣列的地址賦給它,int *p=array,注意陣列名就是陣列的地址,而且陣列的地址就是首元素的地址。因此我們的指標變數就指向了陣列的首元素,*p=2。如果把(p+1),那麼指標變數就指向了陣列的下一個元素5,因此我們可以利用指標來遍歷陣列的各個元素:

#include <stdio.h>
int main()
{
	int array[5] = {1,2,3,4,5};
	int i;
	int *p = array;
	for(i = 0; i < 5; i++)
	{
		printf("array[%d]=%d\n",i , *(p+i));
	}
	return 0;
}
 3、指標指向字串:

我們都知道用陣列儲存字串,如char name[10]="jack",上面已經簡單講述了指標指向陣列,所以我們可以這樣做,char *name="jack",指標變數指向字串的首個字元並可以依次訪問字串的各個字元。
4、指標指向函式:

我們需要知道怎樣表示一個指標指向函式,說白了就是語法要正確,下面我也取一個程式碼塊來說明一下:

#include <stdio.h>
int sum(int x,int y)
{
	return x+y;
}
int main()
{
	int a = 5;
	int b = 6;
	int (*p)(int,int);
	p = sum;
	int result = (*p)(a,b);
	printf("The result is %d\n",result);
	return 0;
}
不難發現上面程式碼塊里語句(*p)(a,b)可以用p(a,b)來代替,因為p和sum就是一樣的,只是用前者可能更容易理解一點。而我們要知道怎樣定義一個指標指向函式,int (*p)(int,int)這是固定寫法,前面的int是指標將來指向的函式的返回值的型別,如果沒有函式返回值,那就是void,後面括號裡的兩個int 當然就是指標將指向的函式的形參。指標指向函式用起來確實有點抽象,要想熟練運用的話就多去做一些這方面的練習吧!
5、指標指向結構體:

我們首先首先定義一個結構型別,

struct student
{
     char *name;
      int  ages;
};
再根據型別定義結構體變數 struct student stu={"Rose",15};定義一個指標指向結構體型別,struct student *p;把結構體變數stu的地址賦給指標變數p,p=&stu;我們可以有3種方式來訪問結構體中的屬性ages:

stu.ages=15;

(*p).ages=15;

p->ages=15;

不過第三種方式在C語言中只能用來指向結構體。

 綜上所述,指標的基本用法就是這幾種,還有些用法不常見的小編在此就一一例舉了,有興趣的話可以去翻閱相關的資料。