2017-04-26 71 views
0

具有下列:鑄造指針返回功能的結果指針的參考,可通過另一種功能的參數

char* function1(char* parameter) 
     { 
      printf("%c",*parameter); 
     } 
char* function2(char* sequence) 
     { 
      return *sequence; 
     } 
int main() 
     { 
      char* sequence = malloc(1); 
      *sequence = 'a'; 
      function1(function2(sequence)); 
     } 

該程序運行是理所當然給分段故障,因爲函數2的呼叫返回一個指針,並且function1調用需要一個引用來指向它的指針參數。

有沒有辦法將函數2返回的指針作爲參數傳遞給函數1?

+1

當您取消引用char *時,您會得到一個字符。不太清楚爲什麼你會在function2中返回一個char *。 –

+1

否 - 當您用'return * sequence'解除引用時,您將其丟失了。 – ThingyWotsit

+1

注意編譯器錯誤信息;如果你沒有看到,那麼你需要調整你的編譯器設置。 (不要忽略這個) –

回答

2

我想你想要做這樣的事情的*序列:

char* function1(char* parameter) 
{ 
    printf("%c", *parameter); 
    return parameter; 
} 
char* function2(char* sequence) 
{ 
    return sequence; 
} 
int main() 
{ 
    char* sequence = (char*)malloc(1); 
    *sequence = 'a'; 
    function1(function2(sequence)); 
} 

你也可以用你的編譯器發現了一些錯誤。 function2()必須返回一個char *,但是當你返回時,你正確地解引用它,這會得到你一個char。 Furtermore function1()也不會返回任何值。

+0

所以這是以下警告告訴我的內容:test.c | 7 | warning:返回使得整型指針沒有投射[-Wint-conversion] | –

+0

@AlyShmahell正確的,這就是我所說的:它警告你一個事實,即你隱式地將一個角色投射到一個指向角色的指針上,這可能會導致段錯誤。 –

+0

在警告中提到整數讓我覺得這不是問題,但現在想起它,指向一個字符的指針實際上是一個十六進制值,我正指着它...... –

1

您的函數2返回的值不是地址,但函數1將該值視爲地址並嘗試訪問它。因此你正在接受段錯誤。函數2應該返回指針,但在你的情況你是不是返回指針

+0

aaaalright,回到正軌。我從來沒有想過函數返回的作用與傳遞參數的指針相同!謝謝:) –