回答ありがとうございます。
その方法で a が変更されることを確認しました。(↓こんな感じ)
>array<String^>^ a=System::IO::Directory::GetFiles("C:\\","*.*");
>for each(String^% s in a)
>{
>  s=System::IO::Path::GetFileName(s);
>}

しかし同じ事を一旦、ArrayList に入れてからやろうとすると、
 'System.ArgumentException' のハンドルされていない例外が mscorlib.dll で発生しました。
 追加情報: パスに無効な文字が含まれています(↓こんな感じ)
>array<String^>^ as=System::IO::Directory::GetFiles("C:\\","*.*");
>ArrayList ^al=gcnew ArrayList;
>al->AddRange(as);
>for each(String^% s in al)
>{
>  s=System::IO::Path::GetFileName(s);
>}

一旦、ArrayList に入れてるのは、実際には再帰的に GetFiles を呼び出して、サブフォルダ内の
すべてのファイル名を ArrayList に入れているからです。

なんで、ArrayList に入れるとエラーが発生するんでしょうか?