此代碼由我的C++教師在樣本期中提供。我們在一個非常基礎的層面上覆蓋了argc和argv,所以我理解這些表達式的含義。然而,像解引用運算符和'++'之類的任何附加內容都會讓我困惑,而我所搜索的內容還不夠清晰,因此無法將其應用於此特定示例。此外,當我嘗試編譯,它提供了這樣的錯誤:什麼是++ argv? &令人困惑的編譯器錯誤
In function 'int summer(int*, char**)':
Line 9: error: cannot convert 'char**' to 'const char*' for argument '1' to 'int atoi(const char*)'
compilation terminated due to -Wfatal-errors.
我們還沒有正式覆蓋的指針,但我想我明白他們不夠好。 char **意味着你解除引用兩次,所以指針char的值是一個指向別的東西的指針,所以第二個*意味着我們需要這個值。它是不變的,因爲我們依靠命令行中的某些輸入並且無法更改?我不明白這一點。
#include <iostream>
using namespace std;
int summer(int *acc, char * ptr[])
{
register int n;
n = atoi(ptr);
*acc = *acc + n;
}
main(int argc, char * argv [])
{
int sum = 0;
while (--argc)
summer(&sum, *++argv);
cout << "sum is " << sum << endl;
}
另一個問題:當* ++ argv傳遞給summer()時,這是否意味着(argv [] + 1)的值?那甚至會是什麼?將值1添加到整個矢量?我知道atoi(數組)意味着將字符串轉換爲數值,然後將其存儲在int'n'寄存器中,然後將其添加到main中直接改變的和中。這就是我真正理解的這段代碼的唯一部分。對不起,如果我的問題/這個帖子有點亂。
要總結一下我的問題是:
- 什麼是編譯錯誤信息是什麼意思?
- ++ argv是做什麼的?
謝謝。
編輯:
好吧,我做你們建議的修改(謝謝!!):
#include <iostream>
using namespace std;
int summer(int *acc, char * ptr)
{
register int n;
n = atoi(ptr);
*acc = *acc + n;
return 0;
}
int main(int argc, char * argv[])
{
int sum = 0;
while (--argc)
summer(&sum, *++argv);
cout << "sum is " << sum << endl;
return 0;
}
我還增加了收益,因爲編譯器給了一個新的由於函數類型沒有返回值而導致錯誤。在鍵盤上,它編譯和打印「總和爲零」,但是,它仍然不能在Dev C++ 5.7.1上編譯,這正是我正在使用的。它不顯示錯誤消息(我一直在閱讀的是從Codepad在線編譯器),或者至少我無法找到將它們打開的位置。它只是突出了它似乎有問題的線條,而這仍然是atoi(ptr)的界線。
我很難相信你的教師會給你不可編譯的代碼。 – user657267 2014-11-04 00:06:01
那麼人們不是完美的哈哈,這不是他第一次這樣做。這也可能是我缺少的東西。我給他發了一封電子郵件,但我希望這個網站能提供更快的反饋。 @ user657267 – Sarah 2014-11-04 00:08:39
更不用說'main'應該是'int main',並且聲明一個'register'變量對於當代編譯器來說通常是毫無意義的。指針繁重的代碼也很奇怪,因爲這是一個C++類。 – user657267 2014-11-04 00:11:47