我有一個包含for回圈的函式,用于列印指向陣列索引和值的指標,
但我的問題是我在互聯網上找不到如何通過指向陣列的指標列印索引
我嘗試了很多選項,但它總是輸出地址、值或崩潰。 ..
double func(double*startValueOfArrayPointer,double*endValueOfArrayPointer){
double *pointerI;
for(pointerI=startValueOfArrayPointer 1;pointerI<=endValueOfArrayPointer;pointerI )
{
printf("\n %d value is %.2lf", ,*pointerI);
}
}
我希望它像這樣輸出 smth:
1 值為 23.32
2 值為 34.65
3 值為 1.76
...
提前致謝
uj5u.com熱心網友回復:
區別在于型別ptrdiff_t和正確的列印方式是:
printf("\n %td value is %.2lf", pointerI - startValueOfArrayPointer ,*pointerI)
或者如果您的實作不支持%td:
printf("\n %lld value is %.2lf", (long long)(pointerI - startValueOfArrayPointer) ,*pointerI)
uj5u.com熱心網友回復:
對于初學者,您的函式不回傳任何內容,盡管它的回傳型別不是void。
'l'格式字串中的長度修飾符也不起作用。
請記住,在 C 中索引從 0 開始。不過,您的函式可以如下所示。
void func( const double *first, const double *last )
{
for ( const double *current = first; current != last; current )
{
printf( "\n%tu value is %.2f", current - first 1, *current );
}
}
或者,如果您希望輸出的索引可以從用戶指定的值開始,那么該函式可以如下所示
void func( const double *first, const double *last, size_t initial )
{
for ( const double *current = first; current != last; current )
{
printf( "\n%zu value is %.2f", ( size_t )( current - first initial ), *current );
}
}
注意指標last不能在輸出值的范圍內。否則很難為陣列指定一個空范圍。即范圍指定為[first, last ).
例如,如果你有一個像
double a[N];
并想使用該函式輸出陣列的所有值,然后呼叫該函式
func( a, a N );
或(如果要使用修改后的函式)像
func( a, a N, 1 ); // or func( a, a N, 0 );
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369524.html
上一篇:如何實作信號量書中的偽代碼?
