-2

我在几段代码中看到了一个声明为 char* 的字符串。这是如何工作的,它肯定是指向单个字符的指针,而不是组成字符串的字符数组。如果我希望将字符串输入到一个可以这样调用的方法中:

theMethod("This is a string literal");

参数应该是什么数据类型?

4

3 回答 3

5

当然它是指向单个字符的指针,而不是字符数组

它是指向数组的第一个字符的指针char。通过执行指针算术和“数组”索引,可以使用指向其第一个元素的指针访问数组的每个元素。

参数应该是什么数据类型?

const char *, 如果您不想从函数中修改字符(这是一般情况),并且char *如果您这样做。

于 2013-07-17T19:06:51.273 回答
2

这是一个常见的初学者-C 混淆。一个指向任何类型的指针, ,T *要么是指向单个 T 类型对象的指针,要么是指向 T 类型对象的线性数组中的元素的指针,大小未指定。您,程序员,有责任知道哪个是哪个,并根据需要传递长度信息。如果你弄错了,编译器会等待你的程序离开未定义行为的悬崖。

在某种程度上 C 有字符串(有一个强有力的案例证明它不是真的),它们无耻地利用了这种歧义,这样当你看到char *const char *在 C 程序中时,它几乎总是指向一个字符串,而不是单个char. 指向任何其他类型的指针并非如此。

于 2013-07-17T19:12:45.563 回答
0

每个定义是 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 和其他问题,我只是尝试清除

于 2013-07-17T20:04:41.540 回答