C 将字符指针重置为数组顶部

C 将字符指针重置为数组顶部,c,C,我正在编写一个函数,需要计算数组的长度: while(*substring){ substring++; length++; } 现在当我退出循环时。该指针仍将指向数组的开头吗?例如: 如果数组为“Hello” 当我用指针退出循环时: H还是空值 如果它指向NULL,如何使它指向H?它指向数组的NULL终止符。只需记住另一个变量中的位置,或从指针中减去长度。在循环结束时,*子字符串将为0。这是循环结束的条件: while(*substring) 所以while((子字符串指向

我正在编写一个函数,需要计算数组的长度:

while(*substring){
    substring++;
    length++;
}
现在当我退出循环时。该指针仍将指向数组的开头吗?例如:

如果数组为“Hello”

当我用指针退出循环时:

H还是空值


如果它指向NULL,如何使它指向H?

它指向数组的NULL终止符。只需记住另一个变量中的位置,或从指针中减去长度。

在循环结束时,
*子字符串将为
0
。这是循环结束的条件:

while(*substring)
所以
while((子字符串指向的值)不等于0),dostuff

但随后
*子字符串
变为0(即字符串末尾),因此
*子字符串
将指向NULL

如果要将其返回到H,请执行
substring-length


但是,您正在编写的函数已经存在。它在
string.h
size\t strlen(const char*)
size\t
是指针大小的整数(即32位操作系统上的32位和64位操作系统上的64位)。

指针一旦移动,将不会自动移动到任何其他位置。因此,一旦while循环越过指针,指针将指向NULL或“\0”,这是字符串的终止序列。 为了返回到字符串的长度,只需计算字符串长度,您已经通过递增长度变量完成了这项工作。 示例代码:

#include<stdio.h>
int main()
{
  char name1[10] = "test program";
  char *name = '\0';
  name = name1;
  int len = strlen(name);
  while(*name)
  {
    name++;
  }
  name=name-len;
  printf("\n%s\n",name);
}
#包括
int main()
{
char name1[10]=“测试程序”;
字符*名称='\0';
name=name1;
int len=strlen(名称);
while(*名称)
{
name++;
}
name=name len;
printf(“\n%s\n”,名称);
}

希望这有帮助…

C中的字符串存储在末尾,并带有一个空字符(表示为
\0

因此,可以如下声明字符串

char *str="Hello!";
在内存中,这看起来像
Hello!0
(或者更确切地说,是一个数字字符串,对应于每个字母后跟一个零)

您的代码如下所示:

substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}
当您到达此循环的末尾时,
*子字符串
将等于
0
子字符串
将包含上述
0
字符的地址。除非您明确这样做,
子字符串
的值不会更改

要使指针指向字符串的开头,可以使用
子字符串长度
,因为指针是整数,可以按整数进行操作。或者,您可以在开始之前记住位置:

beginning=str;
substring=str;
length=0;
while(*substring){
    substring++;
    length++;
}
substring=beginning;

它没有指向空值;它指向字符串末尾的空终止符。这两者之间有一个微妙但重要的区别。如果要计算字符数组的长度,string.h中的strlen()将执行此函数。