Использование gcc 4.4.3 c89:
Я просто работаю над следующим кодом:
У меня просто есть несколько вопросов по разыменованию указателя src.Который объявлен в вызывающей функции как:
char src[] = "device_id";
Моя путаница заключается в разыменовании src:
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.
dest[i] = &src[i];
Есть ли разница в выполнении этого в функции printf для% s при использовании либо &src[i]
, либо src[i]
:
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]);
}
}
Большое спасибо за любые предложения,