取消引用数组指针

Posted

技术标签:

【中文标题】取消引用数组指针【英文标题】:Dereferencing array pointers 【发布时间】:2016-04-10 20:21:36 【问题描述】:

我试图取消引用这个指向新数组 (ARR) 的指针,但是从下面的这个示例中,当我执行取消引用 *issub 时,它只“携带”第一个字母。我该如何解决这种情况并让ARR(subscount) 成为我想要的词?

#include <iostream>
  int main()
  char inp[3]='O','I','L';
  int lll=3;
  char ARR[3];
  int subscount=0;

  char * issub= new char[lll];
  for(int i=0;i<lll;i++)
    issub[i]=inp[i];
  
  ARR[subscount]=*issub;
 

【问题讨论】:

你的代码很糟糕,因为 inp 正在被越界索引访问! 你到底想做什么?填充ARR 的每个单元格,使其与inp 相同,ARR[subscount] 中有一个指针将指向单词? @gsamaras 我希望 ARR[0] 像 inp 一样成为“OIL” 但是@J.Barbosa inp[0] 是“O”,而不是“OIL”。 @DavidSchwartz strcpy 不适用于不包含字符串的字符数组(如本问题所示) 【参考方案1】:

我觉得你很困惑,所以我为你做了一个例子:

#include <iostream>

int main() 
  char inp[4] = 'O','I','L', '\0';
  int lll = 4;
  // initialize elements of 'ARR' to 0 for safety
  char ARR[4] = 0;
  int subscount = 0;

  // dynamic allocation, DO NOT forget to de-allocate
  char* issub = new char[lll];
  // copy every element of 'inp' to 'issub'
  for(int i=0;i<lll;i++) 
    issub[i]=inp[i];
  
  // this will copy where '*issub' points to,
  // that is the 'issub[0]', to 'ARR[subscount]'
  ARR[subscount] = *issub;
  std::cout << ARR << "\n"; // prints: O
  // you can use a for loop as before to copy the contents,
  // from 'inp', 'issub' to 'ARR'

  // However, we will do something different here,
  // so I am de-allocating 'issub'
  delete [] issub;

  // We will use an array of pointers, with size 2,
  // thus it will have two pointers in total.
  char* ptr_arr[2];

  // Assign the first pointer to 'inp'
  ptr_arr[0] = &(inp[0]);

  std::cout << ptr_arr[0] << "\n"; // prints OIL

  // we don't use the second pointer,
  // set it to NULL
  ptr_arr[1] = NULL;
  return 0;

希望有所帮助(但它确实让我想起了 C,而不是 C++,应该使用 std::string)。


更新为以空字符结尾的字符串; What is a null-terminated string?

谢谢@M.M

【讨论】:

我想我明白了,但 inp[0] 不应该只是第一个字符吗? @J.Barbosa inp[0] 是第一个字符。是的。

以上是关于取消引用数组指针的主要内容,如果未能解决你的问题,请参考以下文章

取消引用指向整个数组的指针

通过取消引用更改 NSArray 中的值?

通过指针、强制转换和取消引用加载向量?

使用指针分配数组值

C++数组,指针,引用以及三者的复合类型

指针和引用指针数组和数组指针