【发布时间】:2014-11-24 12:21:21
【问题描述】:
我刚刚在我的大学开设了一门新课程,它在没有学习所有语法和语义的情况下直接跳到了 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 没有字符串。我们只有字符数组,按照惯例,在字符串的最后一个有效字符之后放置一个
\0。 -
你基本上必须克服相信存在诸如“字符串”之类的东西——没有。内存中可能有您相信是字符串并且将视为字符串的字节,但对于系统而言,它们也可能代表萝卜。所以什么是字符串完全取决于你来跟踪。而且,由于实际上没有什么可以称为“字符串”,
char*指针只是指向 RAM 中某处的指针。是否可以将其视为“字符串”纯粹是您如何处理它的问题。 -
那么在“abcd”的字符数组中,有没有办法只引用“a”并通过数组递增它?谢谢
-
我赞赏你决定学习字符串、数组和指针,而不是仅仅用标准容器来铺平它们,但是......你的伪代码几乎是不可理解的,并暗示了对这些事情的一些深刻误解工作。我强烈建议你先玩一会儿
int*和int[],因为人们似乎对它们没有同样的误解。