理解char数组[]和字符串

Kaj*_*olK 16 c c++ arrays pointers char

我是编程新手.我正在学习C作为我的第一门编程语言.我发现一些奇怪的东西要理解.

我已经知道在C中我们可以将String表示为像这样的字符序列(使用char数组):

char status[10] = "Married";   
Run Code Online (Sandbox Code Playgroud)

我已经了解到这种方法的问题是我们必须status在编译期间告诉数组的大小.

但是现在我已经知道我们可以使用char指针来表示string 类似 -

char status[10] = "Married";
char *strPtr;
strPtr = status;
Run Code Online (Sandbox Code Playgroud)

我不理解它.我的问题是 -

  1. 我怎样才能在索引4(即Married)中使用strPtr

  2. 在数组表示的末尾status有一个空字符(\0)- - - - - - - .因此,通过使用null字符(),我们可以理解字符串的结尾.当我们使用时,我们怎样才能理解结束?stringcharMarried\0\0strPtrstring

Gop*_*opi 14

char *strPtr;
strPtr = status;
Run Code Online (Sandbox Code Playgroud)

现在你的指针strPtr指向数组中的第一个字符,你可以这样做

int i =0;
while( strPtr[i] != '\0')
{
  printf("%c ",strPtr[i]);
  i++;
}
Run Code Online (Sandbox Code Playgroud)

*strPtr 被称为取消引用指针以获取存储在指针指向的位置的值.

记下来

strPtr[4] = *(strPtr +4); 
Run Code Online (Sandbox Code Playgroud)

两者都将获得存储在数组索引4处的值.

注意指针和数组名称之间的区别:

----------------------------------
| s  | t  | r  | i  | n | g | \0 |
----------------------------------
  |
strPtr
status
Run Code Online (Sandbox Code Playgroud)

strPtr ++ 将使您的指针指向数组中的下一个元素.

| s  | t  | r  | i  | n | g | \0 |
----------------------------------
       |
      strPtr
Run Code Online (Sandbox Code Playgroud)

而您不能为阵列名称执行此操作

status++不允许,因为数组不是可修改的左值.