字符串文字如何等于char *,以及如何将字符串作为参数

时间:2013-07-17 19:04:21

标签: c string pointers

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

theMethod("This is a string literal");

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

3 个答案:

答案 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,我只是尝试清除