1. 程式人生 > >一級指標和二級指標

一級指標和二級指標

什麼是指標?
在電腦科學中,指標(Pointer)是程式語言中的一個物件,利用地址,它的值直接指向(points to)存在電腦儲存器中另外一個地方的值。由於通過地址能夠找到所需變數單元,可以說,地址指向該變數單元。因此,將地中海形象化的稱為“指標”。意思是通過它能找到以它為地址的記憶體單元。

指標是一個變數,存在記憶體單元的地址。(編號)
指標又分為一級指標和二級指標。
一級指標
一級指標主要是用來存放變數(不同型別的變數需要用不用型別的指標來接受)的地址,在函式呼叫時,形參只是實參的一份臨時拷貝。
這個時候我們要做的就是,在呼叫函式傳引數時,要傳“址”,而不是傳值。將需要改變變數的地址傳給引數,因為變數的地址時不變的,這個時候在函式內部只需要訪問變數地址就能達到在函式內部更改實參的方式

#include <stdio.h>
#include <stdlib.h>

//函式傳值,形參只是實參的一份臨時拷貝,main函式中變數不會改變
void change1(int a, int b)
{
	a = 5;
	b = 10;
}

//函式傳址,利用指標的解引用操作改變變數的值
void change2(int* a, int* b)
{
	*a = 5;
	*b = 10;
}
int main()
{
	int a = 2;
	int b = 3;
	printf("a = %d b = %d\n", a, b);	// a = 2 b = 3
	
	//傳值
	change1(a,b);
	printf("a = %d b = %d\n",a ,b);		//a = 2 b = 3	
	
	//傳地址
	change2(&a,&b);
	printf("a = %d b = %d\n");		//a = 5 b= 10

	system("pause");
	return 0;
}

二級指標
二級指標主要時用來存放一級地址,可用在函式中儲存一級指標

#include <stdio.h>
#include <stdlib.h>

void test(char** p)
{

}
int main()
{
	char c = "w";
	char* pc = &c;
	char** ppc = &pc;
	char* arr[10] = {0};

	//函式傳一級指標地址
	test(&pc);
	//函式傳二級指標
	test(ppc);
	//函式傳指標陣列地址
	test(arrr);

	system("pause");
	return 0;
}