大神教你利用指標間接賦值
阿新 • • 發佈:2020-12-24
我們都知道,指標是指向一段記憶體空間的。而這個記憶體空間也可以存放下一個記憶體空間的地址,這樣一級級的傳遞下去,就變成了多級指標。在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 】