今天一朋友給我看了一道題,很是鬼畜的題目。雖然知道應該沒有人會這麼寫代碼,但是這裏面的邏輯還是很值得了解學習的。
代碼填空:填寫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的地址。