2017-02-24 109 views
-1

我必須寫一個C程序執行以下操作:陣列指針和函數

  • 編寫一個函數,有三個參數:一個指向範圍的第一 元件在陣列中,一個指針到 後面的元素是數組中一個範圍的結尾,以及一個int值。使函數 將數組的每個元素設置爲int值。

我的代碼不工作。這是我到目前爲止。任何幫助表示讚賞。

#include <stdio.h> 
#include <iostream> 

int listNumbers[3]{ 1,2,3 }; 
void Sorter(int *first, int * last, int *value); 
int * first = &listNumbers[0]; 
int * last = &listNumbers[2]; 
int value; 

int main() { 

    printf("your list numbers are:\n"); 
    int i; 
    for (int i = 0; i < 3; ++i) { 
     printf("%d", listNumbers[i]); 
    } 
    printf("\n"); 

    printf("enter an integer:\n"); 
    scanf_s("%d", &value); 

    Sorter(first, last, &value); 

    printf("your new list numbers are:\n"); 
    int j; 
    for (int j = 0; j < 3; ++j) { 
     printf("%d", listNumbers[j]); 
    } 
    printf("\n"); 

    system("PAUSE"); 
    return 0; 
} 
void Sorter(int *first, int * last, int *value) { 

    int i=0; 
    printf("value = %d\n", &value); 
    *first = value; 

    while (i <= *last) { 
     *(first + i) = value; 
     i++; 
    } 
} 
+0

任務應該是設置由兩個指針指定的* range *的每個元素嗎?這似乎比您實際編寫的更適合設置(整個)數組中的每個元素。 –

+0

請注意,全局數組在C中無效初始化 - 我保留判斷它是否在C++中有效(它可能足夠現代C++)。其他三個全局變量是不必要的。你應該儘可能避免全局變量。有時他們是必要的;在這裏,他們不是。即使數組可以/應該在'main()'中定義和初始化。此外,「Sorter」這個名字對於「Setter」或其他人來說是一種惡意行爲;你不排序數組,但將其元素設置爲單個值。 (我想,如果你設置整個數組,然後排序,但...) –

回答

1

首先,找出2個指針之間的差異。

int count = last - first + 1; 

編譯器會自動除以一個整數的大小。我們添加1以使範圍包含在內。現在只需遍歷每個元素:

for (int i = 0; i < count; i++) { 
    first[i] = value; 
} 

此外,爲什麼您將值作爲指針傳遞?這應該只是一個價值。

void Sorter(int *first, int *last, int value) { 

當你罵它...

Sorter(first, last, value); 
1

Sorter功能不符合標準的問題。這些參數應該是兩個指向數組的指針,以及一個int。你的函數接受三個指針。

儘管如此,通過使用第三個參數指向的值作爲填充值,您至少可以實現練習的明顯精神,但是您不這樣做。相反,您將指針本身分配給每個數組元素。 應該至少從你的編譯器引出一個警告,你不應該忽略它的警告,特別是當你的代碼沒有做你認爲它應該做的。

此外,last指針預計指向剛過去的最後一個要設置的元素,但您使用它,就好像它指向的是從開始指針的整數偏移量。這與前面的問題幾乎相反:在這裏,您需要使用指針值本身,而不是它指向的指針值int