The_Unknown_Member Ответов: 1

[C++] указатель на массив ?


Привет. Может ли кто-нибудь объяснить мне, почему я не могу сделать так, чтобы мой указатель указывал на адрес массива ?
int main()
{
	char s[] = "string";
	char *p = &s;


    return 0;
}


Но это работает:
int main()
{
	char s[] = "string";
	char *p = s;


    return 0;
}


А также может ли кто-нибудь объяснить мне, как работает этот цикл for ?
int main()
{
	char s[] = "string";
	
	for (char *cp = s; *cp; cp++)
	{
		printf("element %c \n", *cp);
	}


    return 0;
}


Что я уже пробовал:

Задавая вопрос здесь в CodeProject.com

1 Ответов

Рейтинг:
5

OriginalGriff

Ты не можешь этого сделать:

char s[] = "string";
char *p = &s;
потому что имя массива-это указатель на первый элемент этого массива. Так s уже является указателем на char, так &s является указателем на указатель на char. Вам нужно будет изменить тип p чтобы использовать адрес s:
char s[] = "string";
char **p = &s;

Эта работа:
char s[] = "string";
char *p = s;
потому что s является указателем на char, и так далее p


The_Unknown_Member

У меня есть еще один вопрос. Допустим, у меня есть такой массив: char s [] = " string";
Поскольку массивы в C++ являются указателями на данные в памяти и поскольку char равен 1 байту, то s[1] должен быть таким же, как s + 1, верно ? Но он не компилируется ? Почему?

OriginalGriff

Это будет зависеть от того, что именно вы пытаетесь скомпилировать.
Если это так:

printf ("%c%c", s[0], s[1]);

Затем он скомпилируется, и он будет работать - он напечатает первые два символа.
С каким кодом у вас возникают проблемы с компиляцией?