我在几段代码中看到了一个声明为char *的字符串。这是如何工作的,当然它是指向单个字符的指针,而不是构成字符串的字符数组。如果我希望将字符串输入带入一个可以这样调用的方法:
theMethod("This is a string literal");
参数应该是什么数据类型?
答案 0 :(得分:5)
肯定是指向单个字符的指针,而不是字符数组
它是指向char
数组的第一个字符的指针。通过执行指针算法和“数组”索引,可以使用指向其第一个元素的指针访问数组的每个元素。
参数应该是什么数据类型?
const char *
,如果您不想修改函数中的字符(这是一般情况),如果您这样做,则char *
。
答案 1 :(得分:2)
这是一个常见的初学者-C混淆。指向任何类型T *
的指针不明确地指向单个T类型对象的指针,或指向线性数组中元素的指针类型为T的对象,未指定大小。作为程序员,您有责任了解哪个是哪个,并根据需要传递长度信息。如果你弄错了,编译器会等待并监视你的程序是否驱逐了未定义的行为悬崖。
在某种程度上C有字符串(有很强的理由表明它不是真的),他们会采取这种歧义的无耻优势,这样当你看到char *
时或者在C程序中const char *
,几乎总是将是指向字符串的指针,而不是单个char
。指向任何其他类型的指针也是如此。
答案 2 :(得分:0)
每个定义是char *类型的“字符串”(或unsigned char *或const char *)但是,它是指向该字符链的第一个字符的指针(我不想使用单词array或vector)。区别在于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和其他probs,我只是尝试清除