GCC взбесилси?

grayich
хз, по логике то адрес должен быть)
вот именно, а поч работает?
нужно сигуру какого-то спрашивать
safocl
почему то гцц начал ересь нести…
Это Вы несете ересь, обвиняя при этом компилятор. Ересь вот тут

char str1 = "razraz";
Вы берете и знаковому 8-битному целому присваиваете указатель на строку, то есть беззнаковое 64-разрядное целое, о чем компилятор честно Вас и предупреждает

test.c:6:14: предупреждение: при инициализации указатель преобразуется в целое без приведения типа [-Wint-conversion]
при этом он сообщает свой же ключ, убирающий это предупреждение и позволяющий Вам спокойно стрелять себе в ногу. Не надо гнать на компилятор, а нужно внимательно посмотреть на свой код.

Что касается указателей, то любой массив в си это указатель соответствующего типа. Запись char * интерпретируется на этапе трансляции в машинный код как массив символов, то есть строка. И не надо тут в Гарвард ходить даже

P.S.: В помощь для понимания
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
Запись char * интерпретируется на этапе трансляции в машинный код как массив символов, то есть строка
нелогично
если char *x равнозначно char x[], то зачем вообще нужна лишняя сущность?
Если мне не изменяет память, то в C вообще нет char[]. Это прерогатива C++, а C != C++, это разные языки

Исходя из кода, ТС использует именно C, причем стандарта C89, о чем свидетельствует вот это

void main(void)
а современном си войд в параметрах функции уже не ставят
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
maisvendoo
то в C вообще нет char[]
в книге 1985г по си такая структура имеется
maisvendoo
Исходя из кода, ТС использует именно C, причем стандарта C89, о чем свидетельствует вот это
c99

maisvendoo
# 2 часа, 27 минут назад (отредактировано 2 часа, 25 минут назад)
смарел видосы, где именно указанным си99 стандартом пишут и указывают войд в качестве параметров функций, грят чо енто лучше все же делать, если параметры пусыте, ибо можно заэксплойтить код, вводя какие либо параметры. А с войдом функция внаглую понимает чо параметры отсутствуют и все подставленные параметры будут игнориться.
safocl, пробуй такой вариант
#include <stdio.h>

int main ()
{
  char s1[] = "Привет safocl";
  printf ("%s\n", s1);
 }

EDIT 1 - char *s1[] char *s1 и char s1[] - вещи разные

EDIT 1 - исправил описку/ошибку, подмеченную grayich
Ошибки не исчезают с опытом - они просто умнеют
grayich
в книге 1985г по си такая структура имеется
Значит мне изменяет память)

Погуглил. Вот вполне разумное объяснение
Да пребудет с нами Сила...!
CPU Intel Core i9 10900-KF/RAM DDR4 128 Gb/NVidia GForce GTX 1080 Ti Turbo 11Gb/SSD M2 512 Gb/HDD Seagate SATA3 2 Tb/HDD Toshiba 3Tb/HDD Toshiba 6Tb
http://rusrailsim.org
vasek
EDIT 1 - char *s1[] и char s1[] - вещи разные
char *s1 и char s1[]
 
Зарегистрироваться или войдите чтобы оставить сообщение.