int a[][3]={1,2,3}; int (*p)[3]=a
时间: 2023-09-21 17:08:11 浏览: 44
这样的语句是合法的,因为 `int a[][3]` 表示一个二维数组,其中第一维的长度可以不指定,第二维的长度为3。因此,数组 `a` 包含了一个长度为3的整型数组,可以被解释为一个指向长度为3的整型数组的指针数组。
定义一个指向数组 `a` 的指针变量 `p`,可以这样写:
```
int a[][3] = {1, 2, 3};
int (*p)[3] = a; // 指向长度为3的整型数组的指针变量
```
可以通过指针变量 `p` 来访问数组元素,例如:
```
cout << (*p)[0] << endl; // 输出数组的第一个元素
cout << *(*p + 1) << endl; // 输出数组的第二个元素
```
也可以使用指针算术运算来访问数组元素,例如:
```
cout << (*(p+0))[1] << endl; // 输出数组的第二个元素
cout << (*(p+1))[0] << endl; // 输出数组的第一个元素(第二行第一个元素)
```
需要注意的是,指向二维数组的指针变量 `p`,指向的是一个包含了多个长度为3的整型数组的数组。因此,指针算术运算的时候,需要考虑每个数组的长度。
相关问题
int * p=null;int * a=*p;
这段代码存在指针错误。首先,`p`被初始化为`null`,也就是空指针,不能直接用来访问内存。其次,在第二行中,`*p`表示访问空指针所指向的内存,会导致程序崩溃。应该将指针`p`指向一个合法的内存地址,例如:
```c
int x = 10;
int *p = &x; // 将指针p指向变量x的地址
int *a = p; // 将指针a指向指针p所指向的内存
```
这样就可以将指针`p`指向一个合法的内存地址,并将其赋值给指针`a`。注意,指针`a`和指针`p`指向的是同一块内存,它们具有相同的值,但是类型为`int *`。
int a=0;int *p = a; 和 int *p = &a; 这里int *p=a;与int *p=&a;有什么区别?
在C++中,int a=0; 表示定义了一个整型变量a并将其初始化为0。
而 int *p = a; 表示将整型变量a的值赋值给一个指向整型数据的指针p。但是这是错误的,因为指针变量p需要存储一个地址,而不是一个整型值。因此,这个语句会编译失败。
相反,int *p = &a; 表示将整型变量a的地址赋值给一个指向整型数据的指针p。这是正确的用法,并且p指向的是整型变量a的地址。
因此,int *p = a; 和 int *p = &a; 语句之间的区别是,前者将整型值赋值给指针变量,而后者将整型变量的地址赋值给指针变量。