你好, 欢迎回来｡
现在我们对指针有了更详细的了解,
我想谈谈字符指针, 主要是如何使用字符指针来表示字符串｡
字符串是字符数组､ 多个字符､ 单词｡
因此, 我们现在知道了数组在指针运算的概念中是如何与指针相关联的｡
非常非常有用的概念｡
这些概念在应用于字符数组字符串时非常有用, 因为现在我们可以轻松地逐个字符遍历字符串｡
使用指向数组的指针的最常见应用之一是作为指向字符串的指针｡
原因之一是符号的方便和效率｡
因此, 使用指向char的指针类型的变量来引用字符串可以提供很大的灵活性｡
所以你要尽可能多地使用字符指针,
来代替字符数组, 特别是使用字符指针来传递数据给函数.
各种各样的好东西｡
让我们看一个使用数组复制字符串的例子｡
在这个例子中, 我们的数组参数将是一个字符数组｡
你可以在函数声明中看到｡
我想把它和一个带字符指针的函数做个比较, 看看字符指针函数是如何高效的｡
所以在这个例子中,
我们有两个函数, 一个接受数组, 一个接受指针｡
在第一个函数copy string中, 我们可以使用for循环遍历整个数组, 从sub
I开始, I等于0, 一直遍历到看到空字符串,
然后递增循环控制变量｡
然后你要做的就是说2, I等于, I｡ 我们在那里做直接任务｡
然后在最后我们一直走到看到null字符, 我们在to数组的末尾加了一个null字符,
非常简单.
现在让我们看看如何使用指针｡
首先, 我们在复制字符串中将指针声明为函数声明, 只需将char星星声明为char
start from｡
在我们的for循环中, 我们不需要声明任何变量,
因为我们有指针,
我们只需要迭代, 直到from到达空终止符｡
然后我们可以递增from和to指针｡
因为我们在做点运算｡
我们我们只是给指针加1, 这就是地址加1, 这就是下一个字符.
下一个for循环行,
我们只解引用to和from, 因为我们想把指针指向的实际值, 实际字符赋值给to指针.
然后在最后, 我们把空字符加到,
to指针指向的地方, 也就是, from的最后一个地址的末尾, 但现在指向to地址.
看起来还不错｡ 我的意思是你有一个for循环｡
你基本上有相同数量的代码｡
但是你可以看到语法上的不同｡
你不用下标, 用指针, 用星号｡
同样, 这是一个符号方便性的问题｡
你看不出有什么大的优势｡
但实际上, 当使用指针时,
您可以进一步优化它, 甚至可以减少代码｡
所以如果你有一个字符数组作为指针, 如果你有一个字符数组叫做text, 你可以类似地定义一个指向它的指针,
并使用文本中的元素｡
所以这里我们可以用字符星星文本指针来表示, 这就是字符指针的定义.
如果文本指针设置为指向名为text的字符数组的开头, 则可以使用这些前后实现和递减操作符将其递增1｡
所以上面的这个加号+文本指针将设置文本指针指向文本中的下一个字符, 也就是text sub
1｡
如果我们想像查找整数一样查找下一条射线,
我们所要做的就是加1, 2, 然后我们就能得到下一个字符｡
但在字符数组中它更有用, 因为你可以很容易地一个一个地操作字符｡
如果您执行减号—文本指针（即递减运算符）,
则会将指针设置为文本中的上一个字符, 假设文本指针没有指向文本的开头｡
因为如果是的话, 你会有这些下边界的错误｡
如果它在字符串的末尾做了一个加号, 你就会有一个越界错误｡
就像整数运算一样, 您必须始终小心, 不要超出数组的边界｡
但是非常简单, 它与整数指针运算紧密相关｡
字符指针算术也是一样的｡
它甚至更有用, 因为现在你可以不使用下标来查看单个字符｡
如果我们看一下前面的例子, 我们实际上可以使用指针来进一步优化它, 使它的代码行更少｡
所以现在在我们的copy字符串中, 我们做这个函数的声明和之前一样,
用星号创建一对指针｡
但是我们不再使用for循环了, 因为在前面的例子中使用for循环是没有意义的,
因为我们实际上不需要初始化循环控制变量｡
我们所需要做的就是在一个条件下退出一个循环, 然后我们实际上在for循环中使用了递增和递减操作符, 但我们甚至不需要这样做｡
实际上它在这里变得更简单了, 因为如果我们使用while循环,
我们只需要查看while循环,
如果它指向一个空字符, 它就会跳出来, 因为空字符实际上等于零.
while循环记住,
c中的布尔值是用整数表示的, 一为真,
零为假, 或者真的零为假, 其他都为真.
在这个例子中, 空字符0是假的, 它会跳出来｡
所以你要做的就是在while循环中的退出条件中加上一个星号from｡
这是在做什么, 从中取值, 来看看这个字符的值是什么｡
所以当我们到达要复制的字符串的末尾时, 我们就跳出来.
否则我们就把修改过的指针放进去,
从++到2 ++.
这是一个后递增运算符｡
所以这意味着加号在变量的右边｡
当你这样做的时候, 这意味着在语句完成之前你不会给它加一个｡
所以它的作用是, 它会说星星2等于起始点｡
然后在这个语句完成之后, 它会加到2, 1, 然后从1加到｡
如果变量名前面有加号, 它会在执行语句之前, 把加号加到变量上, 这就有问题了,
因为我们会错过字符串中第一个被复制的元素.
但我们不需要更多的代码行｡
我们在同一条语句中执行实际的增量指针运算和赋值, 因此我们将代码减少了一个｡
同样, 符号也很简单｡
我们可以很容易地进行整数算术赋值｡
最后, 复制完所有的字符串后, 我们把空字符加到指针的末尾,
我们解引用了这个指针, 因为这两个字符实际上是它通过循环,
指向最后一个字符的原因.
所以这里稍微清理了一下｡
它向你展示了指针的强大功能, 以及如何在同一行中使用指针和算术运算, 通过这些递增和递减运算符,
这些加号和减号, 它使运算更快更容易,
也更高效｡
如果我们想使用这些复制字符串函数, 我们可以只创建两个字符数组｡
我们可以将字符数组直接传递给复制字符串, 因为0字符数组是指针｡
它们是指针, 所以我们不需要去引用它们,
也不需要添加地址或其他任何东西｡ 我们可以直接说string2, string1｡
它要做的就是把一个字符串复制到string2字符数组中, 然后用printf输出.
我想通过一个例子来说明如何使用字符指针而不是字符数组, 以及为什么有时更喜欢使用字符指针｡
我们提到过, 有时候, 程序员的偏好是,
如果你用以前的语言编程, 比如Fortran,
你可能会习惯于｡
但是如果你有它, 你你会看到使用指针的好处｡
希望这对你有帮助｡ -谢谢—谢谢