gpt4 book ai didi

c - 从字符串的角度理解 C 中的指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:18 25 4
gpt4 key购买 nike

我刚刚在我的大学开始了一个新类(class),它有点直接跳到 C 而没有学习所有的语法和语义(这还不错,可以学习)。然而,与我理解的语言(java、python)相比,一个很大的区别是指针的概念。

我知道:

& - Address of something
* - value stored at the address of something

所以如果我有这样的字符串:

char a[] = "ABCDEF";

“a”是否有与之关联的地址 (&a),如果有 (*a),它是否引用了整个字符串? “数组”中的第一个字符 (A)?

看看它是一个 char [] 的想法,字符串中的每个字符都有自己的地址吗?

我的最终目标是编写一个可以操作指针的函数,以便在一个字符串中找到与第二个字符串中的字符匹配的第一个字符。

我走在正确的轨道上吗?请注意,这都是伪代码,因为我仍在努力学习 C 语法

#include <stdio.h>

int main() {
create address to 'a'
create address to 'b'
make 'a' a string like "abcdefg"
make 'b' a string like 'b'
call findMatch(a,b); //pass in both to a function
return 0; // I know I have to have this at the end
}

void findMatch(char a, char b){
Retrieve the pointer to the first character in the 'a' string
Increment through 'a' to see if it matches the dereferenced b
If 'a' contains 'b' print its in the string as well as the address of the location in 'a'
}

example run - findMatch("abcdef","f") gives a print statement that says 'f' is in 'abcdef' and the address location of 'f'

我已经阅读过在 C 中使用字符串函数构建的库,但我想自己操作指针来学习。

谢谢

最佳答案

在 C 中:

  • 指针是一个地址。您几乎可以互换使用这些术语。
  • 数组变量是指向它引用的数组的第一个元素(即地址)的指针。
  • 字符串只是一个字符数组(或宽非 ASCII 字符的 wchars)。

当您的代码包含如下声明时:

char a[] = "ABCDEF";

编译器在适当的位置(例如堆栈)为整个字符数组加上结尾的 \0 终止字节分配足够的内存,并相应地写入字节。

记住你的变量 a 现在是第一个字母 'A' 的地址;因此,您可以像指针一样使用它。例如,使用 * 运算符访问它的值(称为解引用)并比较它:

*a == 'A' // commonly written as: a[0] == 'A'

将评估为真。因此,以下所有条件也都为真:

*(a + 1) == 'B' // commonly written as: a[1] == 'B'
*(a + 2) == 'C' // commonly written as: a[2] == 'C'
*(a + 3) == 'D' // commonly written as: a[3] == 'D'
*(a + 4) == 'E' // commonly written as: a[4] == 'E'
*(a + 5) == 'F' // commonly written as: a[5] == 'F'
*(a + 6) == '\0' // commonly written as: a[6] == '\0'

如果需要任何额外说明,请告诉我。

关于c - 从字符串的角度理解 C 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com