c++ - 理解 char array[] 和 string

标签 c++ c arrays pointers char

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

我了解到在 C 中我们可以将字符串表示为这样的字符序列(使用 char 数组):

char status[10] = "Married";   

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

但现在我知道我们可以使用 char 指针来表示 string 像 -

char status[10] = "Married";
char *strPtr;
strPtr = status;

我没有正确理解它。我的问题是 -

  1. 如何使用 strPtr 获取索引 4 处的字符(即 Married 中的 i)?

  2. status中有一个空字符(\0)在代表的string的末尾char 数组 - M-a-r-r-i-e-d-\0。所以通过使用空字符(\0)我们可以理解字符串的结尾。当我们使用strPtr时,如何理解string的结尾?

最佳答案

char *strPtr;
strPtr = status;

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

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

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

请注意

strPtr[4] = *(strPtr +4); 

两者都会得到存储在数组索引 4 处的值。

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

----------------------------------
| s  | t  | r  | i  | n | g | \0 |
----------------------------------
  |
strPtr
status

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

| s  | t  | r  | i  | n | g | \0 |
----------------------------------
       |
      strPtr

而您不能对数组名称执行此操作

status++ 是不允许的,因为 an array is not a modifiable lvalue .

关于c++ - 理解 char array[] 和 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366782/

相关文章:

c++ - pthread调度问题

c++ - C++ 中的轻量级反射

c++ - Qt 和 Webkit 未显示所有 CSS 3、HTML 5 效果

c - 从 curl_easy_perform() 获取数据的 libcurl 问题

python - 对二维 numpy 数组进行子集化

java - 如何重新分配一维数组中的值?

c++ - ffmpeg 是在 CPU 还是 GPU 中运行?

c - 跟踪 C 中与局部变量同名的全局变量

c - 从程序中读取 JSON 输出,然后在 C 中解析 JSON

Python PYPY Cffi 与 Numpy 数组