我正在阅读 K&R,我几乎读完了关于指针的章节。我不完全确定我是否要以正确的方式使用它们。我决定尝试使用指针实现 itoa(n)。我做这件事的方式有什么明显的错误吗?我不是特别喜欢我需要留出一个大数组来作为字符串缓冲区来做任何事情,但话又说回来,我不确定这是否真的是在 C 中处理它的正确方法。
在决定在代码中使用指针时,您是否喜欢遵循任何一般准则?下面的代码有什么可以改进的吗?有没有一种方法可以在没有静态字符串缓冲区的情况下使用字符串?
/*Source file: String Functions*/
#include <stdio.h>
static char stringBuffer[500];
static char *strPtr = stringBuffer;
/* Algorithm: n % 10^(n+1) / 10^(n) */
char *intToString(int n){
int p = 1;
int i = 0;
while(n/p != 0)
p*=10, i++;
for(;p != 1; p/=10)
*(strPtr++) = ((n % p)/(p/10)) + '0';
*strPtr++ = '\0';
return strPtr - i - 1;
}
int main(){
char *s[3] = {intToString(123), intToString(456), intToString(78910)};
printf("%s\n",s[2]);
int x = stringToInteger(s[2]);
printf("%d\n", x);
return 0;
}
最后,有人可以为我澄清一下数组和指针之间的区别是什么?K&R 中有一段让我很困惑;“5.5 - 字符指针和函数。” 我将在这里引用它:
“定义之间有一个重要区别:
char amessage[] = "now is the time"; /*an array*/ char *pmessage = "now is the time"; /*a pointer*/
message 是一个数组,刚好足以容纳字符序列和初始化它的 '\0'。数组中的单个字符可能会更改,但消息将始终引用相同的存储。另一方面,pmessage 是一个指针,初始化为指向一个字符串常量;指针随后可能会被修改为指向别处,但如果您尝试修改字符串内容,则结果未定义。”
那有什么意思?