const疑惑
这句话怎么解释啊 ??
如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const修饰,否则该参数将失去输出功能。
[解决办法]
意思就是说,如果参数作为输出功能,例如,
void f(char *out) {
out[0] = 'a';
out[1] = 'b';
}
char x[20];
f(x);
//现在x[0] == 'a', x[1] == 'b'
但是如果你加了const,
void f(const char *out) {
out[0] = 'a'; //错误,不能修改const类型数据
}
就是去了参数输出的功能咯。
[解决办法]
int function(int para1, int para2, int *sum){ *sum = para1+para2; return 0;}int function(int para1, int para2, const int *sum){ *sum = para1+para2; //这样是不能改变sum值 return 0;}
[解决办法]
输出并不一定是指打印到屏幕上,对函数来讲,函数的运行结果也可以叫做函数的输出。
例如
int add(int a, int b) {
return a+b;
}
int result = add(3,4);
这个函数的返回值就叫做输出。
函数只能返回一个变量,所以有时候单单凭函数返回是不能够处理函数的所有运行结果。我们需要通过函数参数,给函数一个变量,让函数的运行结果存储在该参数中。例如,
void add_array(int *a, int *b, int *c, int len) {
//a和b是int数组的输入,
//c负责输出
for (int i = 0; i < len; i++) {
c[i] = a[i]+b[i];
}
}
int a[] = { 1, 2, 3 };
int b[] = {4, 5, 6};
int c[3];
add_array(a, b, c, 3);
//c的结果是 {5, 7, 9}的int数组。
上例,c是输出用的,不能加const,加了const就不能修改c数组的元素的值了,但是a和b是输入用,可以加const,更好的写法是,
void f(const int *a, const int *b, int *c, int len) {
//....
}