这样声明的两个函数有什么区别

时间:2022-12-06 01:44:12
void test1(const char* p);
void test2(char* p);

函数的参数都为指针,不考虑在函数内部这个变量能不能修改的问题,加const和不加const对调用他的函数有什么区别?

20 个解决方案

#1


没有区别

#2


const char *p指的是不允许修改p指向内存空间存储的数据,即不允许修改字符串的值;如果不考虑函数内部不修改变量,基本没区别

#3


const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变

#4


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int *  const q;//*q,q都不可变

楼上正解,关键是可变与不可变

#5


基本是没有区别的...只是需要在设计函数的时候去考虑下参数是否可变... 这样声明的两个函数有什么区别

#6


加const和不加const对调用他的函数没区别

#7


知道const 是干嘛的?

#8


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变


void test(char* p)
比如这个函数,如何使函数不能修改指针p指向的内容?

#9


这个只对编译器有效,如果是c++编译出来函数符号名有影响,但最终汇编代码是一样的。

#10


增强代码可读性

#11


没有区别

#12


不考虑在函数内部这个变量能不能修改的问题
--没区别

#13


void test1(const char* p);

1.这是一个良好的文档习惯,仅观察函数的原型就能发现该参数指向的数据在函数定义中不会被修改
2.编译器可以捕捉到在函数定义中任何试图修改该参数所指向数据的错误
3.使函数接受的参数类型更广发,即允许向该函数传递const char *参数,test1函数内部不会修改p指向的数据,但是如果这里test函数的参数为char *,则不能向其传递char *参数,

#14


区别在于,调用该函数的程序员,看到const,可以知道函数里不会修改变量,而没有const,函数里可能修改变量。如果不修改,加上const,一个惯例。

#15


学过一本C语言,几乎是一路飘过.

#16


引用 13 楼 we_sky2008 的回复:
void test1(const char* p);

1.这是一个良好的文档习惯,仅观察函数的原型就能发现该参数指向的数据在函数定义中不会被修改
2.编译器可以捕捉到在函数定义中任何试图修改该参数所指向数据的错误
3.使函数接受的参数类型更广发,即允许向该函数传递const char *参数,test1函数内部不会修改p指向的数据,但是如果这里test函数的参数为char *,则不能向其……

+1
总结的很详细

#17


调用好像是没有区别的喔

#18


引用 8 楼 erocyli 的回复:
引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变


void test(char* p)
比如这个函数,如何使函数不能修改指针p指向的内容?
可以啊

#19


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变

++
参数的const传递表明了一种参数的使用方法——readonly
这种写法不仅是增强代码可读性,而且是非常有效的减少运行时错误的方法……
话说,程序员都知道,运行时错误比编译时错误让人头疼百倍……
如果是自己写函数给自己用,自己一般不会用错,加上const可以说更保险了……
但是如果你的代码是大家共用的话,别人不一定也能用对,这个时候加上const,首先在函数调用的时候会出现参数声明,告诉别人这个参数不可变,更重要的是就算别人试图改变这个参数,这种错误也会在编译时就报错,而不会等到运行时才让程序崩溃……

#20


木有区别。正如上面的童鞋们所说

#1


没有区别

#2


const char *p指的是不允许修改p指向内存空间存储的数据,即不允许修改字符串的值;如果不考虑函数内部不修改变量,基本没区别

#3


const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变

#4


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int *  const q;//*q,q都不可变

楼上正解,关键是可变与不可变

#5


基本是没有区别的...只是需要在设计函数的时候去考虑下参数是否可变... 这样声明的两个函数有什么区别

#6


加const和不加const对调用他的函数没区别

#7


知道const 是干嘛的?

#8


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变


void test(char* p)
比如这个函数,如何使函数不能修改指针p指向的内容?

#9


这个只对编译器有效,如果是c++编译出来函数符号名有影响,但最终汇编代码是一样的。

#10


增强代码可读性

#11


没有区别

#12


不考虑在函数内部这个变量能不能修改的问题
--没区别

#13


void test1(const char* p);

1.这是一个良好的文档习惯,仅观察函数的原型就能发现该参数指向的数据在函数定义中不会被修改
2.编译器可以捕捉到在函数定义中任何试图修改该参数所指向数据的错误
3.使函数接受的参数类型更广发,即允许向该函数传递const char *参数,test1函数内部不会修改p指向的数据,但是如果这里test函数的参数为char *,则不能向其传递char *参数,

#14


区别在于,调用该函数的程序员,看到const,可以知道函数里不会修改变量,而没有const,函数里可能修改变量。如果不修改,加上const,一个惯例。

#15


学过一本C语言,几乎是一路飘过.

#16


引用 13 楼 we_sky2008 的回复:
void test1(const char* p);

1.这是一个良好的文档习惯,仅观察函数的原型就能发现该参数指向的数据在函数定义中不会被修改
2.编译器可以捕捉到在函数定义中任何试图修改该参数所指向数据的错误
3.使函数接受的参数类型更广发,即允许向该函数传递const char *参数,test1函数内部不会修改p指向的数据,但是如果这里test函数的参数为char *,则不能向其……

+1
总结的很详细

#17


调用好像是没有区别的喔

#18


引用 8 楼 erocyli 的回复:
引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变


void test(char* p)
比如这个函数,如何使函数不能修改指针p指向的内容?
可以啊

#19


引用 3 楼 johnpher 的回复:
const int i; //i不可变
const int *p;//*p不可变,p可变
const int * const q;//*q,q都不可变

++
参数的const传递表明了一种参数的使用方法——readonly
这种写法不仅是增强代码可读性,而且是非常有效的减少运行时错误的方法……
话说,程序员都知道,运行时错误比编译时错误让人头疼百倍……
如果是自己写函数给自己用,自己一般不会用错,加上const可以说更保险了……
但是如果你的代码是大家共用的话,别人不一定也能用对,这个时候加上const,首先在函数调用的时候会出现参数声明,告诉别人这个参数不可变,更重要的是就算别人试图改变这个参数,这种错误也会在编译时就报错,而不会等到运行时才让程序崩溃……

#20


木有区别。正如上面的童鞋们所说

#21