1. 程式人生 > 實用技巧 >大神教你利用指標間接賦值

大神教你利用指標間接賦值

我們都知道,指標是指向一段記憶體空間的。而這個記憶體空間也可以存放下一個記憶體空間的地址,這樣一級級的傳遞下去,就變成了多級指標。在C語言中,多級指標是經常會用到的。

多級指標像一把雙刃劍,有利也有弊。你能夠用它完成一些奇淫技巧,也會遇到一些不可捉摸的錯誤。

其中,指標有一個非常重要的作用:間接賦值

你能夠通過n級指標去修改n-1級指標的內容,甚至直接修改指標所指向的記憶體空間

例如:

你在main函式裡面聲明瞭一個字串指標,然後你想通過呼叫一個外部函式來修改它。這個時候,你就可以將這個字串指標的地址傳遞給函式。這樣,函式的引數就是一個二級指標了,通過這個二級指標,你可以很方便的修改字串的內容。

程式碼如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int Test1(char **p1)
{
	char *temp = (char *)malloc(50); 
	strcpy(temp,"hey!");  //間接賦值
	*p1 = temp;     //更改指標所指向的記憶體空間
	printf("T1 %d\n",*p1);  //打印出地址
}

int Test2(char *p2)
{
	strcpy(p2,"goodBy!");
	printf("T2 %d\n",p2);  //打印出地址 ,會發現和實參的地址一樣
}


//間接賦值
//利用n級指標 改變n-1級指標的值
int main(int argc,char *argv[])
{
	char *p = (char *)malloc(100);
	printf("%d\n",p);
	strcpy(p,"hello");

	Test1(&p);  //通過n+1級指標直接更改指向的記憶體空間
	printf("T1 修改後的值 %s\n ",p);

	Test2(p);   //通過同級指標更改內容
	printf("T2 修改後的值 %s\n ",p);
	system("pause");
	return 0;
}

上述程式碼中有兩個函式,其中Test1直接通過n+1級指標修改了p所指向的記憶體空間,而Test2只是修改了p所指向記憶體空間的內容。它們都能夠修改p的內容,但是相對於test2而言,test1更為徹底。當然,具體選用那種方式,還是要根據實際的專案需求來定。

指標
http://www.makeru.com.cn/live/1392_238.html?s=45051
指標換裝你還認識嗎
http://www.makeru.com.cn/live/5413_2043.html?s=45051
C語言控制led燈
http://www.makeru.com.cn/live/1392_304.html?s=45051
輸入和輸出
http://www.makeru.com.cn/live/1758_312.html?s=45051

可以加入學習交流群來一起學習交流 【 943552345