如果我有一個int
s的數組,我怎麼能直接編輯每個int
?修改整數數組中的整數
int i = arr + 1; // Getting the integer in pos 1
i
只是一個副本,是否正確?如果我設置了i = 4
,那麼arr + 1
仍然是1
。
會這樣嗎?
int *i = &(arr + 1);
*i = 4;
如果我有一個int
s的數組,我怎麼能直接編輯每個int
?修改整數數組中的整數
int i = arr + 1; // Getting the integer in pos 1
i
只是一個副本,是否正確?如果我設置了i = 4
,那麼arr + 1
仍然是1
。
會這樣嗎?
int *i = &(arr + 1);
*i = 4;
你應該使用數組運算符:
int i = arr[1];
arr[1] = 4;
數組索引運營商可以做你的需要。
arr[3] = 101; //assignment to array
int x = arr[37]; //get value from array
等
無需對這裏的內存算術..
你已經有了:
int arr[4] = {0, 1, 2, 3};
要進一步編輯呢?
arr[0] = 42;
// arr[] = {42, 1, 2, 3};
要一次更改所有的人?有:
for(int i = 0; i < 4; ++i)
arr[i] = i * 2;
// arr[] = {0, 2, 4, 6};
而且不要忘記memset()
!
memset(arr, 42, 4);
// arr[] = {42, 42, 42, 42};
想要的一切,但第一個元素更改爲7
?
memset(&arr[1], 7, 4 - 1);
// arr[] = {42, 7, 7, 7};
你想知道事端約pointers? (Here's a more useful link.)
看到這個? (如果你不能,請停止閱讀此內容,謝謝!)
int *ptr = &arr[1];
它等同於:
int *ptr = arr + 1;
這也等同於:
int *ptr = arr;
ptr = ptr + 1;
好了,現在我們已經得到了下來,讓我們告訴你一個比我上面做的更有效的循環:
int *ptr = arr;
for(int i = 0; i < 4; ++i)
{
*ptr = i << 2;
// i * 2 == i << 2
++ptr;
}
// arr[] = {0, 2, 4, 6};
不是你應該這樣編碼;編譯器很可能會爲您處理它。
你想以一系列問題的形式回答另一個問題嗎?
你的代碼改成這樣:
int *i = arr + 1;
*i = 4;
,它會工作。 C中的數組只是指向數組中第一個元素的指針。 所以這個arr + 0
將給出陣列中第一個元素的地址,這個arr + 1
是第二個元素的地址。
我想你的意思是說'地址算術'而不是'記憶算術' – blubb 2011-05-01 20:17:18
是的,這是更好的方式說出來。或者可能是指針算術 – 2011-05-01 20:18:08