Строка "hello"
- это, конечно, статические данные, которые включены в ваш исполняемый файл, стенографически. Эти данные уже доступны в памяти при запуске вашей программы, все статические и постоянные данные. А поскольку вы используете только свой адрес, только тот адрес помещается в стек.
Теперь, если вы создаете массив так:
char tab[] = "hello";
компилятору, что вы хотите создать массив в стеке, массив, который вы можете свободно хранить что-либо в вас нравится. И вы сообщаете компилятору инициализировать этот массив с постоянной статической строкой "hello"
, поэтому он копирует данные из статического хранилища в массив в стеке.
Проверьте эту ссылку http://stackoverflow.com/a/18479996/1814023 –