大家好, 欢迎回来在这节课中,
我想演示一下我们在指针运算和使用常量修饰符方面的挑战｡
让我们来看看代码块｡ 我将创建一个新项目｡
我们来举一个单指针算术的例子｡
所以我们要做的是, 用点运算来确定字符串的长度｡
我首先要做的是创建函数声明｡
这将返回字符串的长度｡ 所以它的返回类型是int.
我把它叫做字符串长度, 这里只需要一个指针, 但它是一个常量指针.
我们不想更改所指向内容的值｡
这就意味着我们要用常量作为第一个关键字, 然后我们要指定类型,
也就是字符.
我们可以说星星, 我们可以给它取任何名字, 字符串｡
再重申一遍,
如果我们把常数放在这里, 这就表示指针的地址, 指针的值不能改变｡
但同样, 这是一种冗余, 实际上并不需要这样做,
因为我们正在进行逐值传递, 逐复制传递｡
所以你有一个地址的副本, 所以如果你在那里改变它也没有关系｡
但重要的是要改变你所指的东西｡
如果你不想改变你所指的东西的价值, 你肯定想在这里不断地做, 这很重要｡
所以现在我们要做的就是创建我们的main｡
创建我们的主目录｡
我们主要要做的就是调用字符串长度,
一个字符串长度函数, 包含不同的字符串.
让我们打印出来, 记住, 它返回一个整数, 所以我们可以说percent
d, 我们只打印出我们传递的几个字符串的长度｡
我们将调用字符串长度,
我们将传入一些常量字符串, 所以我们可以在这里用双引号括起来｡
我们甚至不需要创建指针｡
您可以创建一个指针并对其赋值, 然后将其传入,
但您必须确保它是一个常量｡
但由于它更容易在更少的代码, 我们可以只说字符串长度测试｡
同样, 这是一个常量字符串｡
我们会用更多的来测试｡
我们会在它后面加一个空格｡ 让我们添加一些换行符｡
这里我们称之为字符串长度｡ 实际上我们用空字符串调用它, 确保我们的值为0｡
第三个我们会说字符串长度, 我们会说jason｡
顺便说一下, 当你创建这些并传递这些字符串长度链接时,
它们会自动得到添加到其中的null终止符｡
我们在声明指针时了解到这一点｡
这是优势之一｡ 如果你要创建一个指针,
并且它是一个常量, 你不需要指定大小.
如果它是一个数组, 你可能会想用字符,
因为数组是指针.
但是如果我们不想指定大小,
我们可以说字符p, 然后在这里我们可以说jason｡
请记住, 如果我们不指定字符数组的大小, 它将自动添加一个空终止符,
并为您创建大小｡
这样你就不会犯任何错误｡
如果您将size放入数组中, 可能没有足够的null结束字符｡
当我们把字符串传递给字符串长度时, 也是一样的,
空终止符会被添加到它的末尾｡
所以我们可以先创建这些变量, 然后做类似这样的事情, 然后传入每个变量｡
但我不想浪费时间去创造变量｡ 所以我就这么做了｡
对于这段代码来说, 真正重要的是函数｡
所以我们要创建字符串长度｡ 记住, 它返回一个整数,
而且是一个常数. 所以我们可以用字符串来表示｡
您还注意到, 函数声明变量名不必匹配｡
我可以把这个作为字符串, 这也没问题.
在这个函数中, 我们需要创建一个局部指针因为这个局部指针会指向字符串的末尾.
一旦我们得到了字符串结尾的地址, 我们就可以减去字符串开头的地址｡
字符串的起始地址就是传入的地址｡
字符串会自动指向数组中的第一个元素或数组的第一个地址｡
如果我们创建了一个本地指针, 我们只需要再创建一个常量字符,
我们只需要说最后一个地址｡
它等于string的起始地址, 然后每次循环都要递增.
现在我们有了最后一个地址｡ 同样,
这是一个局部变量, 用来存储空终止符之前的地址.
现在我们可以编写while循环了｡
当我们看到null结束符时, while循环就会退出.
现在我们可以用两种不同的方法来做｡
我们可以比较人物｡
所以我们可以说while星星最后一个地址, 因为我们必须取消引用它, 不等于反斜杠零,
可以做类似的事情, 但是这是一个很大的代码｡
所有我们真正需要做的只是说, 而星星在最后的地址｡
因为如果你取消引用一个空终结符,
它将等于零, 而零等于假｡
我们知道布尔值有1为真0为假｡
所以如果它是假的, 它就会跳出来｡
所以你要做的就是在while条件中输入星星的最后一个地址｡
同样, 这将取消指针的引用｡
一旦它指向最后一个地址, 它就会指向空终结符｡
现在我们必须确保修改最后一个地址, 以便最终指向空终止符｡
这里我们能做的就是加上最后一个地址｡
所以while循环的每次迭代都要递增地址直到它看到一个0｡
零表示空终止符｡
所以while循环执行完毕后,
的最终结果, last地址将指向空终止符的地址｡
然后我们可以从传入的地址中减去空终止符的地址,
我们的字符串, 这样就给予了我们的长度.
这就是我们下一行要做的｡
我们只需要返回最后一个地址, 实际上我们需要减去地址,
所以我们不需要解引用任何东西, 或者使用间接操作符,
最后一个地址减去字符串｡ 所以字符串被传入,
我们根本不修改它｡
这是指向第一个字符｡ 那就指着j｡
这就是地址, 或者第一次调用第8行, 这就是s的地址｡
最后一个地址将指向最后一个t的地址｡
实际上, 还有一个空终结符｡
如果我们说最后一个地址减去s的地址, 它会给予我们长度｡
这就是我们要返回的内容｡
所以我希望这是有意义的｡
同样,
在第17行, 我们创建了一个局部变量, 因为我们需要跟踪最后一个地址, 即空终止符的地址｡
while循环运行完之后, last地址将指向t之后, 空终止符｡
然后我们可以从字符串中减去最后一个地址, 字符串的地址指向s,
当它进来的时候我们不修改它｡
让我们看看如果这能给我们正确的长度｡
当我们运行这个程序时, 我们应该看到传入的字符串的长度｡
所以我们看到170和5｡
让我们看一下12345678910111213, 你得数一下空格,
14151617.
没错, 我们用双引号括起来, 它是空的,
所以应该是0, 然后杰森应该是5, 所以170和5, 没错｡
所以我们在这里做的是我们用指针运算得到最后一个地址加上增量运算符, 然后用指针运算得到长度,
用最后一个地址减去字符串｡
很漂亮｡
我想证明点运算的威力, 它的符号方便｡
如何轻松地递增､ 递减以到达字符数组中的各个点并取出字符｡
在本例中, 我们只需要获取地址, 然后使用这些地址相减即可得到长度｡
所以我希望这对你有帮助｡ 确保你理解我刚才提到的一切｡
再一次, 常量的概念, 加号的概念,
条件的概念, 如果你解引用一个地址,
它指向一个空终结符, 它是一个0, 所以它跳出来,
然后这个减两个地址的概念｡ -谢谢—谢谢