我已經創建了一個函數,它執行C中的歐氏除法並將商和餘數作爲函數參數。指針作爲函數參數的問題
代碼1:
#include<stdio.h>
#include<stdlib.h>
void euclidean(int a, int b, int * q, int * r);
int main(int argc, char ** argv){
int * q;
int * r;
euclidean(5,4, q, r);
printf("q = %d, r = %d", *q, *r);
return 0;
}
void euclidean(int a, int b, int * q, int * r){
q = (int*)malloc(sizeof(int));
r = (int*)malloc(sizeof(int));
*q = a/b;
*r = a % b;
//printf("q = %d, r = %d", *q, *r); //this will show
return;
}
代碼2:
#include<stdio.h>
#include<stdlib.h>
void euclidean(int a, int b, int * q, int * r);
int main(int argc, char ** argv){
int * q;
int * r;
euclidean(5,4, q, r);
printf("q = %d, r = %d", *q, *r);
return 0;
}
void euclidean(int a, int b, int * q, int * r)
{
*q = a/b;
*r = a % b;
//printf("q = %d, r = %d", *q, *r); //this won't show
return;
}
兩個版本都無法正常工作。我編譯並在Windows上運行代碼,並且程序在運行時被殺死而不打印任何東西(即「q = 1,r = 4」)。我的猜測是,如果我不得不在Linux上編譯和運行它,終端會給我一個「分段錯誤」錯誤(不確定)。我真的不明白爲什麼它不起作用,尤其是代碼清單1。對於代碼清單2可以爭辯說,由於操作的結果是創建它們的函數內的某種常量變量,因此它們不能保留在函數的末尾(我也需要確認) 。由於
在C和C++函數參數中按值傳遞。 'q'和'r'在'main'中未初始化。 – juanchopanza 2014-11-02 20:46:49
開始添加'免費' – deviantfan 2014-11-02 20:47:46
另外,[不要投出malloc(和朋友)]的結果(http://stackoverflow.com/q/605845)。另外,'void'函數最後確實不需要明確的'return;'。另外,由於C99'main'末尾有一個隱式的'return 0;'。如果你有選擇,考慮在整個呼叫站點之前放置整個功能,而不是前向聲明。如果你不重複自己,錯誤的機會就會減少。 – Deduplicator 2014-11-02 21:02:48