使用 GCC 4.4.3 C89:訪問一個陣列
我只是工作在下面的下面的代碼:
我只是有關於取消引用src指向一些問題。這是因爲調用函數聲明:
char src[] = "device_id";
我的困惑在於取消引用源:
for(i = 0; src[i] != '\0'; i++) {
printf("src %d: [ %s ]\n", i, &src[i]);
}
src
已衰變成一個指針。因此,SRC將指向數組中的第一個元素,這將是字符d:
src -> "device_id"
所以,當我做到這一點src[i]
我提領該值,使之返回字符是目前在指指點點。對於這個例子,當它到達nul時,它將從for循環中斷開。
For example i = 0
對於&src[i]
我得到的是字符的地址而不是字符本身? 那麼src[i]
將取消引用並返回d,&src[i]
將返回d的地址。因爲*dest[]
是一個char指針數組,它需要一個地址。所以在這裏我將字符地址分配給指向char的指針數組。
dest[i] = &src[i];
有沒有使用任何&src[i]
或src[i]
在printf函數做要麼這個%s的差異:
printf("src %d: [ %s ]\n", i, &src[i]);
或
printf("src %d: [ %s ]\n", i, src[i]);
的源代碼:
void inc_array(char *src, size_t size)
{
/* Array of pointers */
char *dest[size];
size_t i = 0;
memset(dest, 0, size * (sizeof char*));
/* Display contents of src */
for(i = 0; src[i] != '\0'; i++) {
printf("src %d: [ %s ]\n", i, &src[i]);
}
/* copy contents to dest */
for(i = 0; i < 9; i++) {
dest[i] = &src[i];
}
/* Display the contest of dest */
for(i = 0; *dest[i] != '\0'; i++) {
printf("dest %d: [ %s ]\n", i, dest[i]);
}
}
非常感謝您的任何建議,
爲什麼會有人寫'*(SRC + I)'時,他們可以寫'SRC [I]'?這似乎不必要地混淆了我。 – endolith 2011-12-19 05:20:13