这两个指针是如何别名的?

时间:2012-03-06 19:57:51

标签: c pointers const alias

我有两个指针, amen ptr ,其中我分配给 amen 的所有值也将分配给 PTR

ptr amen 可以是别名吗?

void func(const char *ptr) 
{
  struct samp *test;
  DIR *dp;
  char *amen;
  if(ptr[0]=='c'||ptr[0]=='C')
  strcpy(amen,"c_amen.txt");
  else if()
  ......
  else
  ...
}

所以如果 func 被称为 func(“C”); ptr 将具有与 amen <相同的值/ strong>紧接在第4行之后。

另外, const 是什么?是不是要保护 ptr 不被 func 更改?

1 个答案:

答案 0 :(得分:1)

目前您无法对行为做出任何假设,因为以下行不正确:

char *amen;
// ...
strcpy(amen,"c_amen.txt");

您正在将未初始化的指针传递给strcpy,因此您需要修复它(它希望目标指针有效并且具有适当的大小来保存复制的字符串)。

在修复之后,是的,amen将指向具有相同内容的字符串。当然,它会在函数调用退出后被清理,所以不是很有用。您需要传入字符串的大小或在strlen上调用ptr来确定要分配的缓冲区大小。

该上下文中的

const意味着您无法更改指针指向的内容,即数据是只读的。指针本身不是const。