int main(void) {
int x[100];
int *myPtr;
int j;
myPtr = &(x[100]);
for (j=0; j<100; j ) {
*myPtr = j;
myPtr ;
}
printf("%d", *myPtr);
return 0;
}
這是我的代碼(到目前為止)^ 這些是我的方向:
- 創建一個大小為 100 的一維整數陣列。使用指標加載具有從 0 到 99 的連續數字的陣列。 b.使用指標按升序寫出陣列。C。使用指標按降序寫出陣列。
uj5u.com熱心網友回復:
中的賦值myPtr = &(x[100]);不正確:您myPtr指向陣列的末尾,當您在那里和其他地方寫入時會導致未定義的行為。
將賦值更改為myPtr = x;ormyPtr = &x[0];并將最后一個陳述句更改為printf("%d", *x);
這是一個修改后的版本:
#include <stdio.h>
int main(void) {
int x[100];
int *myPtr;
int j;
myPtr = x;
for (j = 0; j < 100; j ) {
*myPtr = j;
myPtr ;
}
printf("x contains numbers from %d to %d\n", x[0], x[99]);
return 0;
}
uj5u.com熱心網友回復:
獲取x[100]是未定義的行為。
myPtr = x;
for (j=0; j<100; j )
*myPtr = j;
要獲取陣列的地址,只需評估x,即與 相同&x,相同于&x[0],相同于&0[x],相同于&*(x 0)。
uj5u.com熱心網友回復:
x[100]是陣列中不存在的元素,x因為索引的有效范圍是[0, 100)。
所以這個說法
myPtr = &(x[100]);
myPtr在陣列的最后一個元素之后設定指向記憶體地址的指標。取消參考這樣的指標會呼叫未定義的行為。
在填充陣列元素的 for 回圈中,您需要一個指向陣列第一個元素的指標x。
你可以寫
myPtr = &x[0];
雖然寫起來更簡單
myPtr = x;
因為x用作初始化器的陣列指示符被隱式轉換為指向其第一個元素的指標。
您的程式可以如下所示
#include <stdio.h>
int main(void)
{
enum { N = 100 };
int x[N];
int value = 0;
// fill the array
for ( int *myPtr = x; myPtr != x N; myPtr )
{
*myPtr = value ;
}
// output the array in the ascending order
for ( const int *myPtr = x; myPtr != x N; myPtr )
{
printf( "%d ", *myPtr );
}
putchar( '\n' );
// print the array in the descending order
for ( const int *myPtr = x N; myPtr != x; )
{
printf( "%d ", *--myPtr );
}
putchar( '\n' );
return 0;
}
在最后兩個 for 回圈中,使用了該型別的指標,const int *因為在該指標所指向的陣列的回圈元素內沒有改變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/315013.html
上一篇:減1與遞減迭代器
