I understand that I need to tell solidity where a parameter is located, for example a string:
function f(string memory abc) {...
Because a string could be calldata (passed in original method call) or it could be memory or it could be storage.
But this does not seem to be required for other types such as uint.
Why only string needs to be specified?