无意中声明指针

时间:2016-01-12 18:14:25

标签: c++ pointers

我正在尝试将数据传递给函数并将其写入数组,但我一直收到一条错误,指出“从'char'到'char。*'的转换无效”我明白char []是一个函数和char *是一个指针,但据我所知,我没有声明任何一个元素作为指针。

我宣布了两个向量:

std::vector <char> broken(message.begin(), message.end()); 

std::vector <char> encoded(50);

我试图通过函数传递第一个向量,并将结果添加到第二个函数中,如下所示:

for (index = 0; index <= length - 1; index++)
    {
        encoded[index] = cipher(broken[index], length);
    }

以此为功能:

char cipher(char broken[], int length)
{
 char index; // declare index

 if( broken[index] < 123 && broken[index] > 96 ) // if characters are lowercase, 
 {                                               // make them uppercase
     broken = broken - 32;
 }

 for(index = 0; index <= length - 1; index ++)
 {
           broken[index] = broken[index] * (2/3); 
           broken[index] = broken[index] - 12;
           broken[index] = broken[index] ^ 2;
 }

 cout << "Message encoded." << endl;

 system ("pause");

 return(broken[index]);
} 

错误消息表明程序正在接收这些元素之一作为指针,但我不知道为什么。

使用的编译器是Bloodshed Dev C ++ 4.9.9.2。我很感激任何人都可以解决这个问题,因为我是第一个C ++学生并且对此很陌生。

谢谢!

2 个答案:

答案 0 :(得分:1)

char broken[]broken是一个指针。这是因为,在几乎所有上下文中,数组的名称都会衰减为指向其第一个元素的指针。这就是编译器抱怨的地方。功能

char cipher(char broken[], int length);

需要char*int。这被称为:

cipher(broken[index], length)

尝试传递char作为第一个参数,其中预期char*

答案 1 :(得分:1)

您想要编写的内容可能是编码一个字符的函数:

 char cipher(char brokenChar)
{

 if( brokenChar < 123 && brokenChar > 96 ) // if characters are lowercase, 
 {                                               // make them uppercase
     broken = broken - 32;
 }

//there is only one char:
   brokenChar = brokenChar * (2/3); 
   brokenChar = brokenChar - 12;
   brokenChar = brokenChar ^ 2;


 return brokenChar;
}

现在,您可以使用for循环对整个消息进行编码:

std::vector <char> encoded(message.size());//maybe there are more than 50 characters

for (index = 0; index <= message.size() - 1; index++)
    {
        encoded[index] = cipher(message[index]);
    }

然而,密码并不能达到您的预期:

  1. brokenChar = brokenChar * (2/3)总是0,因为2/3为零(你可以输入brokenChar*2/3,这可能是你想要的)
  2. brokenChar = brokenChar ^ 2并不意味着brokenChar*brokenChar(我认为这是你的意图),而是按位xor(顺便提一下将brokenChar提升为int),因此密码总是如此无论输入是什么,都返回-10。
  3. 如果你想要解码你的信息,你的编码功能应该是双射的,即使操作按预期工作也不行