比方說,我有這樣的功能:如何在C中保存一個讀入函數的變量?
void read() {
int num;
scanf("%d", &num);
}
,我想使用num變量在這樣的另一個功能:
void func() {
for (i = 0; i < num; i++)
printf("%d ", i);
}
但是在編譯的時候,它說的變量未初始化。我知道它很可能需要指針,但我無法得到它的一個竅門。
比方說,我有這樣的功能:如何在C中保存一個讀入函數的變量?
void read() {
int num;
scanf("%d", &num);
}
,我想使用num變量在這樣的另一個功能:
void func() {
for (i = 0; i < num; i++)
printf("%d ", i);
}
但是在編譯的時候,它說的變量未初始化。我知道它很可能需要指針,但我無法得到它的一個竅門。
有兩種方法可以去這樣做:
第一種方法需要你的返回類型更改爲int
:
int read() {
int num;
scanf("%d", &num);
return num;
}
void func() {
int num = read();
for (i = 0; i < num; i++)
printf("%d ", i);
}
第二種方法需要你採取int*
指針:
void read(int* p) {
scanf("%d", p);
}
void func() {
int num;
read(&num);
for (i = 0; i < num; i++)
printf("%d ", i);
}
可以使變量全球功能內:
void func() {
int i;
for(i=0;i<num;i++)
printf("%d ", i);
}
這可能不是最具擴展性的方法。 – doctorlove 2014-12-04 15:29:51
你是對的。我想另一種方式。 – 2014-12-04 15:32:12
避免使用'static'和'thread_local'數據;在可能的情況下計劃重新使用和重入併發。 – Deduplicator 2014-12-04 15:34:03
你並不總是需要指針 - 你可以簡單地返回值然後使用它。
int read() {
int num;
scanf("%d", &num);
return num;
}
您現在可以存儲函數返回的值以備將來使用,例如,
void func() {
int num = read();
for (i = 0; i < num; i++)
printf("%d ", i);
}
我應該提到read()函數也有一些{printf},所以如果我運行read(#)它將會填滿無用的打印。 – 2014-12-04 15:45:26
也許打印應該是可配置的 - 具有「讀取」功能也會寫東西不直觀,因爲它不止一件事。你可以嘗試以不同的方式雕刻它。 – doctorlove 2014-12-04 15:50:17
您func
應該是,
void func(int num) {
for (i = 0; i < num; i++)
printf("%d ", i);
}
而且你還需要傳遞值一樣,
void read() {
int num;
scanf("%d", &num);
func(num);
}
我應該提到read()函數也有一些{printf}的,所以如果我運行read(#)它會填滿無用的打印。 – 2014-12-04 15:44:52
還有第三個辦法:調用任何需要從你的函數的數據。儘管這並沒有真正的規模。 – Deduplicator 2014-12-04 15:32:21
我應該提到read()函數也有一些{printf}的,所以如果我運行read(#)它將會填滿無用的打印。 – 2014-12-04 15:44:35
@AntiDeeagle'read()'是你的功能,所以完全取決於你打印或不打印任何你喜歡的東西。如果你需要一個沒有'printf'的版本,可以創建一個沒有'printf'的版本,並用'printf'來調用它。 – dasblinkenlight 2014-12-04 15:49:03