They both point to the destination of your initSID.ora on startup. The difference is, ifile can be define as a parameter in your initSID.ora to point to the real destination of your initSID.ora while the pfile is used to explicitly use a specific initSID.ora on startup.
like:
startup pfile=$ORACLE_HOME/admin/SID/pfile/initSID.ora
For eample:
If you do not specify the pfile= with your startup command, the default init file used will be $ORACLE_HOME/dbs/initSID.ora where SID is the current value of ORACLE_SID. But if you have several instances in your server and you place special admin dirs for those instances you can put an ifile entry in your $ORACLE_HOME/dbs/initSID.ora file pointing to the actual location of you initSID.ora file.
ifile=$ORACLE_HOME/admin/SID/pfile/initSID.ora
Yes, you can move these files or even edit it while the DB is running.