What is the primary advantage of using calldata over memory for external function parameters in Solidity?
-
A
calldata allows modifying the input data
-
B
calldata is permanent and persists after the call
-
C
calldata is read-only and avoids an extra copy, making it more gas-efficient
-
D
calldata supports nested dynamic types that memory does not