Это проблематично по двум причинам.
Прежде всего, вы изменяете переменную локальной области видимости, поскольку initialpointer
является параметром вашей функции.Это означает, что независимо от его типа, то, что вы пишете в саму переменную, видимо только внутри вашей insert
функции.Если бы вы писали в *initialpointer
, это была бы совсем другая история.
Теперь, что еще более проблематично, это то, что B
является локальной переменной, которая находится в стеке внутри вашей функции.Как только эта функция будет оставлена, место хранения B
будет недействительным.Следовательно, если вы вернете указатель на B
, доступ к этому объекту за пределами insert
вызовет неопределенное поведение и, скорее всего, не сработает (у вас есть небольшой шанс, что это конкретное местоположение не было изменено, но это просто удача).
То, что вы, вероятно, хотите вместо
initialpointer = &B;
, таково:
*initialpointer = B;
Это скопирует объект B
вместо хранения, на которое ссылается переменная указателя.Теперь можно B
выйти из области видимости, потому что вы скопировали все в переменную initialpointer
, которая находится внутри main .
Обратите внимание, что переменная initialpointer
внутриmain
- это совсем не то, что в insert
!
И последнее: указание имен переменных, начинающихся с заглавных букв, недопустимо в любой схеме именования.Я до сих пор сталкивался.