我在几段代码中看到了一个声明为 char* 的字符串。这是如何工作的,它肯定是指向单个字符的指针,而不是组成字符串的字符数组。如果我希望将字符串输入到一个可以这样调用的方法中:
theMethod("This is a string literal");
参数应该是什么数据类型?
当然它是指向单个字符的指针,而不是字符数组
它是指向数组的第一个字符的指针char
。通过执行指针算术和“数组”索引,可以使用指向其第一个元素的指针访问数组的每个元素。
参数应该是什么数据类型?
const char *
, 如果您不想从函数中修改字符(这是一般情况),并且char *
如果您这样做。
这是一个常见的初学者-C 混淆。一个指向任何类型的指针, ,T *
,要么是指向单个 T 类型对象的指针,要么是指向 T 类型对象的线性数组中的元素的指针,大小未指定。您,程序员,有责任知道哪个是哪个,并根据需要传递长度信息。如果你弄错了,编译器会等待你的程序离开未定义行为的悬崖。
在某种程度上 C 有字符串(有一个强有力的案例证明它不是真的),它们无耻地利用了这种歧义,这样当你看到char *
或const char *
在 C 程序中时,它几乎总是指向一个字符串,而不是单个char
. 指向任何其他类型的指针并非如此。
每个定义是 char * (或 unsigned char * 或 const char *)类型的“字符串”,但是,它是指向该字符链的第一个字符的指针(我不想使用单词数组或向量)。区别在于 char: 'x' (单引号)
这是很好的老式 c 编程(有时我会为失去它而哭泣)
char *p = "i am here";
for (q=p; ++q; *q) { // so lets start with p walk through and end wit the /0 after the last e
if (*q=='h') { // lets find the first 'h' and cut the string there
*(q-1)=0;
break;
}
}
我在这里没有使用 const 和其他问题,我只是尝试清除