为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
Why this code is giving error.......'a' is pointer to character pointer and should store address of 's', since s is pointer to first element to array
#include<iostream>
using namespace std;
int main()
{
char s[] = "Hello";
char **a = &s; //Give compilation error
cout<<a;
}
由于s是第一个元素的指针,我应该能够将其地址存储在指向字符指针变量的指针中。但是它显示出错误。
使用数组s
可以使其 decay 到其第一个元素的指针。
当想要指针等于执行&s[0]
时,请使用普通s
。该指针将具有char *
类型。表达式&s
是指向 array 的指针,它将具有 char (*)[6]
类型。这是非常不同的。
表达式&s
是指向类型char[6]
对象的指针,该对象是数组s
的类型。
另一方面,char **
类型是指向char *
对象的指针类型。类型char[6]
和char *
是不同的类型。因此指针类型不兼容。
您的谬误是,您认为在此表达式&s
中,数组指定器被隐式转换为指针转换为其第一个元素。但是这样的假设是错误的。
它在C标准(6.3.2.1 LVALUES,数组和功能指定器(中更明确地表示。
3 除非是运算符或Unary的操作数 &amp;操作员,或者是用于初始化数组的字符串 具有"类型的数组"类型的表达式转换为 用类型的"键入指针"的表达式指向初始 数组对象的元素,不是lvalue。如果数组对象 有寄存器存储类,行为不确定。
相关文章:
- 将一个类的方法指针存储到另一个类中
- 将字符指针存储到容器中
- 用指向文件的指针存储数据结构
- C++17:unique_ptr<char[]> 和 shared_ptr<char[] 之间的指针存储差异>
- 将指针存储到矢量时内存泄漏
- 指针存储字符串?
- 将指针存储到SQLITE3数据库中的类别抛出segfault
- 指向本地变量的指针存储在此变量范围之外
- 将模板化对象指针存储在矢量中并通过基类指针进行访问
- 如何将指针存储在实例变量中,该指针被声明为指向基类的指针
- 将指针或一系列指针存储在动态阵列中
- 当对象的指针存储在矢量中时,如何访问对象中的方法?
- 将从方法返回的原始指针存储到智能指针中
- 将指向参数个数可变的函数的指针存储在结构对象中
- 将指向const的指针存储到structs的向量中
- 一系列指针存储地址并以后打印
- 将指针存储在std :: unordered_map中的不同类型的类中
- 超级级别的方法称为super具有sub的str attr 实例在循环 实例中创建的方法是作为super的指针存储在向
- 使用字符指针存储整数
- 我们是否应该将指向类实例的智能指针存储在大型 std::vector 中以获得更好的性能?