Потому что вы передаете копию указателя. Чтобы изменить указатель, вам нужно что-то вроде этого:
void foo(int **ptr) //pointer to pointer
{
*ptr = new int[10]; //just for example, use RAII in a real world
}
или
void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
ptr = new int[10];
}
Вам необходимо включить отложенное расширение. Попробуйте следующее:
@echo off
setlocal enabledelayedexpansion
:blah
set /p input=:
echo."%input%"
for /f "tokens=* delims= " %%a in ("%input%") do set input=%%a
for /l %%a in (1,1,100) do if "!input:~-1!"==" " set input=!input:~0,-1!
echo."%input%"
pause
goto blah
@echo off & setlocal enableextensions
rem enabledelayedexpansion
set S= This is a test
echo %S%.
for /f "tokens=* delims= " %%a in ('echo %S%') do set S=%%a
echo %S%.
endlocal & goto :EOF
от http://www.netikka.net/tsneti/info/tscmd079.htm
для удаления ведущих пробелов.