c语言中的指针(如何在指针指向同一字符串中其他地方的情况下指向字符串中的第一个字符)

c语言中的指针(如何在指针指向同一字符串中其他地方的情况下指向字符串中的第一个字符),c,C,如果我有一个指针指向字符串中的某个地方,让我们假设它指向第三个字母(我们不知道字母的位置,基本上我们不知道它是第三个字母),我们希望它指向第一个字母,这样我们可以使字符串为空,我们怎么做 例如: 如果我们有ascii作为指针 ascii现在指向字符串中的某个地方,我希望它指向字符串的第一个字符,我该怎么做 (注: 我试着说 int len = strlen(ascii); ascii -= len; ascii = '0'; 但它不起作用,只要指针指向0,它就会改变,但不是指向0的第一个字符)

如果我有一个指针指向字符串中的某个地方,让我们假设它指向第三个字母(我们不知道字母的位置,基本上我们不知道它是第三个字母),我们希望它指向第一个字母,这样我们可以使字符串为空,我们怎么做

例如:

如果我们有
ascii
作为指针
ascii
现在指向字符串中的某个地方,我希望它指向字符串的第一个字符,我该怎么做

(注: 我试着说

int len = strlen(ascii);
ascii -= len;
ascii = '0';

但它不起作用,只要指针指向0,它就会改变,但不是指向0的第一个字符)

您不能。C和C++通过“无隐藏成本”规则,这意味着,除了其他事情外,没有人会秘密地为你的字符串存储指针。另一个常见的问题是数组大小;您还必须自己存储它们。

您不能。C和C++通过“无隐藏成本”规则,这意味着,除了其他事情外,没有人会秘密地为你的字符串存储指针。另一个常见的问题是数组大小;您还必须自己存储它们。

首先,在代码中,如果ascii是指向char的指针,则应该是

*ascii='\0'

不是你写的。您的代码将指针本身设置为字符“0”。这意味着它指向了一个不好的地方

其次,strlen返回指向的字符串的长度。假设字符串长度为10个字符,并且您指向第三个字符。strlen将返回8(因为前两个字符已从计算中删除)。从指向的位置减去该值将指向字符串开头之前的6个字符。画一张图来帮助你看到这一点

我知道,如果没有其他信息,就不可能实现你想要做的事情


根据我上面所说的,只要保持字符串的原始长度,您就应该能够计算出需要执行的操作。

首先,在您的代码中,如果ascii是指向char的指针,那么

*ascii='\0'

不是你写的。您的代码将指针本身设置为字符“0”。这意味着它指向了一个不好的地方

其次,strlen返回指向的字符串的长度。假设字符串长度为10个字符,并且您指向第三个字符。strlen将返回8(因为前两个字符已从计算中删除)。从指向的位置减去该值将指向字符串开头之前的6个字符。画一张图来帮助你看到这一点

我知道,如果没有其他信息,就不可能实现你想要做的事情


根据我上面所说的,只要保持字符串的原始长度,您就应该能够计算出需要执行的操作。

否。但是,您可以将其指向字符串的最后一个字符,即每个字符串中“\0”的正前方(称为以零结尾的字符串)


您可以使用指向包含所需信息和字符串的结构的指针来代替字符。

否。但是,您可以将指针指向字符串的最后一个字符,即每个字符串中“\0”的正前方(称为以零结尾的字符串)


您可以使用指向包含所需信息和字符串的结构的指针来代替字符。

这不能保证工作正常,但您可以在找到空字符之前进行备份,然后向前移动一个字符

while(*ascii) ascii--;
ascii++;

它不能保证工作,但您可以先备份,直到找到空字符,然后再向前移动

while(*ascii) ascii--;
ascii++;

所以,如果你有一个指针指向字符串中的某个地方,你可以让它指向该字符串的第一个字符?假设你知道你在哪个索引。如果您不知道字符串的长度,则不知道,因为没有表示字符串开头的标记。但您可以指定给指针。如果另一个指针已经指向字符串的开头,则可以执行
ascii=start\u of_string
。我这样说是因为您似乎缺少第三行的解引用:
*ascii
将访问指向的内容
ascii
将访问指针本身。因此,如果您有一个指针指向字符串中的某个位置,您可以使它指向该字符串的第一个字符?假设您知道所处的索引。如果您不知道字符串的长度,则不知道,因为没有表示字符串开头的标记。但您可以指定给指针。如果另一个指针已经指向字符串的开头,则可以执行
ascii=start\u of_string
。我这样说是因为您似乎缺少第三行的解引用:
*ascii
将访问指向的内容
ascii
将访问指针本身。