C++ 从C+中的int指针返回只读指针+;

C++ 从C+中的int指针返回只读指针+;,c++,pointers,constants,C++,Pointers,Constants,我在一个作业中被要求实现IntList,这是一个动态int数组列表,它的私有成员是“int*p”。在实现所有方法(添加、查找、删除等)后,我无法找到如何实现公共方法返回: 获取指向基础数组的只读指针 如果指针的内容不能更改,如何返回带有*p数字的指针?您必须在方法签名中使用const关键字来告诉编译器返回的内容是常量或不可修改的。因为您返回的是指针,所以您还必须弄清楚如何区分“无法修改的指针”和“无法修改的数据指针”,以及如何指定所需的值。您必须在方法签名中使用const关键字来告诉编译器返

我在一个作业中被要求实现IntList,这是一个动态int数组列表,它的私有成员是“int*p”。在实现所有方法(添加、查找、删除等)后,我无法找到如何实现公共方法返回:

  • 获取指向基础数组的只读指针

如果指针的内容不能更改,如何返回带有*p数字的指针?

您必须在方法签名中使用
const
关键字来告诉编译器返回的内容是常量或不可修改的。因为您返回的是指针,所以您还必须弄清楚如何区分“无法修改的指针”和“无法修改的数据指针”,以及如何指定所需的值。

您必须在方法签名中使用
const
关键字来告诉编译器返回的是常量或不可修改的。由于要返回指针,您还必须弄清楚如何区分“无法修改的指针”和“指向无法修改的数据的指针”,以及如何指定所需的指针。

您声明了指向常量类型的指针,如下所示

type const * 
因此,返回指向常量类型指针的成员函数的声明如下所示

type const * memberfunction();
用返回的任何类型替换单词type


返回的内容不能更改,因为它是常量。因此它不能出现在赋值运算符的左侧,即=;它不能通过非常量参数传递到函数或方法中,除非你抛弃了常量,我一般不建议这样做。

你声明了一个指向常量类型的指针,就像这样

type const * 
因此,返回指向常量类型指针的成员函数的声明如下所示

type const * memberfunction();
用返回的任何类型替换单词type


返回的内容不能更改,因为它是常量。因此它不能出现在赋值运算符的左侧,即=;而且它不能通过非常量参数传递到函数或方法中,除非您抛弃了我通常不推荐的常量。

您需要编写与此类似的代码:

class A {
    int *tab;

public:
    A() {
        tab = new int[3];
        tab[0] = 1;
        tab[1] = 4;
        tab[2] = 6;
    }

    const int * get() {
        return tab;
    }
};

int main() {
    A *a = new A();
    //(a->get())[0] = 2;
}
  • 这样您就可以看到表的内容,但是在类之外更改它的值是不可能的

  • 试图取消最后一行的注释将导致 错误:分配只读位置“*a->a::get()”:)


您需要编写与此类似的代码:

class A {
    int *tab;

public:
    A() {
        tab = new int[3];
        tab[0] = 1;
        tab[1] = 4;
        tab[2] = 6;
    }

    const int * get() {
        return tab;
    }
};

int main() {
    A *a = new A();
    //(a->get())[0] = 2;
}
  • 这样您就可以看到表的内容,但是在类之外更改它的值是不可能的

  • 试图取消最后一行的注释将导致 错误:分配只读位置“*a->a::get()”:)


阅读
const
关键字阅读
const
关键字我想我需要“指向无法修改的数据的指针”,并尝试所有操作,但仍然可以更改方法结果。我想我需要“指向无法修改的数据的指针”,尝试所有的atm,但我仍然可以改变方法的结果。别忘了释放A的析构函数中的标签,否则你会泄漏内存!还要注意的是,一个标签被销毁后,指向该标签的指针将悬空。这就足够了:
~A(){delete[]tab;}
不要忘记释放A的析构函数中的tab,否则会泄漏内存!还要注意的是,一个标签被销毁后,指向该标签的指针将悬空。这就足够了:
~A(){delete[]tab;}