В настоящее время я слежу за этим pdf-файлом по указателям C. Приведенный ниже код был предназначен для демонстрации, но невероятно запутал меня. Во-первых, я понимаю указатели на массивы так, что они инициализируются в памяти кучи адресом памяти первого элемента в массиве, поэтому: ptr = &my_array[0]; /* and */ ptr = my_array;
- это одно и то же. Моя первая проблема с этим кодом заключается в том, что он создал указатель, который не указывает на адрес памяти. Я думал, что инициализация указателя обычно включает &, а значение pA будет адресом памяти первого элемента массива, но когда он печатает указатель на экран, ВСЯ СТРОКА ПЕЧАТАЕТ. Почему? Вдобавок к этому, когда я помещаю еще один * в pA, он печатает первый символ массива. Почему? Вдобавок к этому он использует ++ для * pA и * pB, что для меня не имеет смысла, потому что вывод показывает, что * pA - это первый символ в массиве, а не адрес памяти.
Извините, что мне было сложно осмыслить эту концепцию. PDF просто плохо объясняет указатели или я что-то сильно не понимаю?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char strA[80] = "A string to be used for demonstration purposes";
char strB[80];
int main(int argc, char *argv[]){
char *pA; /* a pointer to type character */
char *pB; /* another pointer to type character */
puts(strA); /* show string A */
pA = strA; /* point pA at string A */
puts(pA); /* show what pA is pointing to */
pB = strB; /* point pB at string B */
putchar('\n'); /* move down one line on the screen */
printf("\n%c\n", *pA);
while(*pA != '\0') /* line A (see text) */
{
*pB++ = *pA++; /* line B (see text) */
}
*pB = '\0'; /* line C (see text) */
puts(strB); /* show strB on screen */
return 0;
}
Вывод:
A string to be used for demonstration purposes
A string to be used for demonstration purposes
A
A string to be used for demonstration purposes
РЕДАКТИРОВАТЬ: Всем спасибо за помощь :), извините за вопрос новичка. Я прочитал «Программирование на C» Стивена Г. Кочана, и его удивительный раздел об указателях мне очень помог.