Указатель на константный или константный указатель?
Вам нужно быть осторожным в способе определения константного указателя.Потому что указатель const не является указателем на const.
static int table[10];
const int* number = table; // non const pointer to const
int * const number2 = table; // const pointer to non const
number++; // this is allowed because the pointer is not const
*number += 2; // this is NOT allowed because it's a pointer to const
number2++; // this is NOT allowed because the pointer is const
*number2 +=2; // this is allowed because the const pointer points to a non const
Кстати, будьте осторожны с ведущими 0, так как они означают восьмеричные обозначения:
cout << 032 <<endl; // displays 26 in decimal since 032 is octal notation
Указатели, адреса и значения
Помните о разнице междууказатель и значение, на которое указывает.К счастью, C ++ защищает вас от запрета:
const int* number = 032; // compiler error
Если вы хотите сохранить указатель на определенное значение:
int myvalue=032;
const int* number = &myvalue; // ok as long as you remain in scope
Осторожно при указании на векторные элементы
И последнее, но не менее важное: если вы испытываете желание использовать указатель на элемент вектора, помните, что адрес элемента вектора может измениться (и указатели будут недействительными) в некоторых случаях, например, когда вектор должен расти.,
Пример того, что вы пытаетесь сделать
Теперь давайте соберем все это вместе и приведем немного измененную программу:
const int * number; // const to avoid accidental overwrite
int search; // value to search for
cout<<"What number are you looking for ? ";
cin>>search;
for(int i=0; i < contactList.size(); i++){
if( contactList[i] == search){ // compare values
number = &contactList[i]; // set pointer
found = true;
}
}
// if the vector is not modified, you may use the pointer.
if(found){
cout<< "Number found: "<< *number <<endl;
}
else{
cout<< "Number NOT found"<<endl;
}