C - 不傳參數修改函數外面的變量pass()

今天一朋友給我看了一道題,很是鬼畜的題目。雖然知道應該沒有人會這麼寫代碼,但是這裏面的邏輯還是很值得了解學習的。

代碼填空:填寫pass()函數。

要求輸出:456

#include "stdio.h"
void pass(){
}

int main(){
	int x = 123;
	pass();
	printf("%d\n",x);
	getchar();
}

剛看到這道題,心裏一句mmp。

仔細思考,原來是考的內存地址的知識。

 

廢話不多說,直接上代碼

#include "stdio.h"
void pass(){
	int temp = 0;          // 定一個變量爲temp
	int *p = &temp;        // 取temp的地址p
	while (*p!=123){       // 比較*p和x的值,讓p移動到x的地址,
		p++;
	}
	*p = 456;              // 修改當前地址的值,也就是x的值。
}

int main(){
	int x = 123;
	pass();
	printf("%d\n",x);
	getchar();
}

 我們知道c語言的變量地址是先存放高地址,逐漸變小。棧區在堆區上面,也就是棧區的地址大於堆區。

使用p使用向上加來尋找x的地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章