我想看看你是否可以通過堆棧傳遞結構,並設法從另一個void函數中的void函數中獲取局部變量。通過堆棧傳遞數據
你們認爲這有什麼用處嗎?有沒有可能在兩次函數調用之間得到損壞的數據?
這裏的(我知道它的髒)
#include <stdio.h>
typedef struct pouet
{
int a,b,c;
char d;
char * e;
}Pouet;
void test1()
{
Pouet p1;
p1.a = 1;
p1.b = 2;
p1.c = 3;
p1.d = 'a';
p1.e = "1234567890";
printf("Declared struct : %d %d %d %c \'%s\'\n", p1.a, p1.b, p1.c, p1.d, p1.e);
}
void test2()
{
Pouet p2;
printf("Element of struct undeclared : %d %d %d %c \'%s\'\n", p2.a, p2.b, p2.c, p2.d, p2.e);
p2.a++;
}
int main()
{
test1();
test2();
test2();
return 0;
}
輸出是代碼在C:
申報的結構:1 2 3 A '1234567890'
結構未聲明的元素: 1 2 3 a'1234567890'
結構的元素未聲明:2 2 3 a'1234567890'
我忘了說:因爲在C語言中,當你在堆棧中聲明一個新變量時,它不會將值初始化爲0或NULL,所以取值就是堆棧中的值:在這個情況下p1的值。 – 2015-02-11 09:53:54
有人會稱這是一個可怕的想法。它過於依賴於C標準中沒有出現的實現細節。 – 2015-02-11 09:58:34
嘗試添加類似'char dummy [16];'Pouet p2;'上面的內容'並查看它是否仍按預期工作。 – 2015-02-11 10:30:39