C语言:如何避免函数修改传入的原数组变量(无需创建新变量)
问题解决方法
在C语言里,数组名作为函数参数传递时会自动退化为指向数组首元素的指针,所以tf函数里的argument直接指向了Test数组的内存空间,修改argument[0]本质就是修改原数组的内容。
要在tf函数内不创建新变量的前提下避免修改原变量,只需给函数参数加上const限定符,将参数声明为const char *argument。这样编译器会阻止对argument指向的内容进行修改,从语法层面杜绝原数组被意外修改的可能。
修改后的代码示例
#include <stdio.h> // 参数添加const限定,禁止修改指向的内容 void tf(const char *argument){ // 尝试执行 argument[0] = 'Z'; 会触发编译错误 } int main() { char Test[5] = "Hello"; printf("'Test' before calling tf function : %s\n",Test); tf(Test); printf("'Test' after calling tf function : %s\n",Test); return 0; }
说明
添加const后,编译器会对所有修改argument指向内容的操作进行检查,一旦发现就会抛出编译错误,这样既能保证原数组Test不受影响,又完全没有在函数内创建新变量,符合你的需求。
内容的提问来源于stack exchange,提问作者shayan
相关产品推荐
相关产品推荐

