我正在实现一个在C中将字符串转换为double的函数。该函数不是破坏性的,即,我不修改传递的字符串,而只是在函数中读取它。我想将char *,const char *以及字符串文字传递给函数。
以下功能是否适合此目的?我认为问题在于是否在C中定义了并允许将char *传递给const char *。
double str2double( const char* input);
Run Code Online (Sandbox Code Playgroud)
谢谢。(我找到了一些类似的问题标题,但他们的答案对我来说很模糊,我在这里问。)
是的,char *input可以分配给类型为变量的变量const char *,并进行隐式类型转换,并且C参数的工作方式就像通过assignment一样。C11 6.5.16.1.1中的规则是这样的:
6.5.16.1简单分配
约束条件
- 以下条件之一应成立:
[...]
- 左操作数具有原子,合格或不合格的指针类型,并且(考虑到左操作数在左值转换后将具有的类型)两个操作数都是指向兼容类型的合格或不合格版本的指针,并且左侧指向的类型具有全部右边指出的类型的限定词;
[...]
这样做
const char *cinput;
cinput = input;
Run Code Online (Sandbox Code Playgroud)
左操作数cinput具有不合格的指针类型(指针类型本身不是const合格的);正确的操作数也是如此。
左操作数是一个指针到一个常量限定类型(const char),和类型指向右边的操作数没有任何限定词。因此,左侧指向的类型具有右侧指向的类型的所有限定符和附加限定符,因此分配有效。const
并在调用函数时
double str2double(const char* input);
[...]
char *foo = ...
str2double(foo);
Run Code Online (Sandbox Code Playgroud)
行为就像foo是通过简单分配将的值分配给了input 参数一样。
C语言中的字符串文字类型是不合格char数组的类型,该数组会退化为char *,即,如果不能通过char *此类函数传递参数,则不能使用double str2double( const char* input);传递字符串文字作为参数。
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |