首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向2D数组C,C++的指针

指向2D数组C,C++的指针
EN

Stack Overflow用户
提问于 2016-01-30 12:59:27
回答 4查看 5.5K关注 0票数 6

我正在学习指南针:

代码语言:javascript
复制
int x[10]; 
int *p = &x

这将使指向第一个元素的指针类型为int。所以,如果我有2D数组,我需要使用双指针:第一个指针将指向数组的第二个维度。这意味着:

代码语言:javascript
复制
int x[3][4] = {{1,2,3,4},{5,6,7,8},{9,9,9,9}};

当我想指出它的时候,我必须声明像这样的第二维的大小,对吗?

代码语言:javascript
复制
int *p[4] = x;

或者通过键入另一种方式:int **p;?

int *p[4]是整数指针数组,它接受4 * (sizeof(int*)),对吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-30 13:02:11

这将使指向第一个元素的指针类型(int)。

不是的。

&x是数组x的地址,是int (*)[10]类型的,您不能将它分配给int *类型。两者都是不兼容的类型。

所以,如果我有2D数组,我需要使用双指针:第一个指针将指向数组的第二个维度。

不是的。

在表达式中,数组转换为指向其第一个元素的指针,除非是sizeof和一元&运算符的操作数。因此,在这种情况下,转换后的x类型将是int (*)[4]。您需要一个指向4个int数组的指针,而不是一个4个指针数组。

代码语言:javascript
复制
 int (*p)[4] = x;
票数 8
EN

Stack Overflow用户

发布于 2016-01-30 13:05:59

添加,第一个示例是不正确的。

x是由10个ints组成的数组。p是一个指向int的指针,而不是一个指向10个int数组的指针。当分配给p时,x会衰减到指向int的类型指针。

转让应简单地:

代码语言:javascript
复制
int* p = x;
票数 3
EN

Stack Overflow用户

发布于 2016-02-07 22:02:01

示例程序:

代码语言:javascript
复制
#include <stdio.h>
main(int argc, char* argv[])
{
    int x[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 987, 9, 9 } }; 
    int(*p)[4] = x; printf("p[2][1] %d", p[2][1]); 
    printf("\nsizeof(p) is : %d \nsizeof(*p) is : %d\n", sizeof(p), sizeof(*p)); 
}

输出

代码语言:javascript
复制
p[2][1] 987
sizeof(p) is : 4
sizeof(*p) is : 16

在我的系统中(和你的系统一样),int和指针是32位。指针的大小是4,int的大小也是4。

p首先是一个指针。不是数组。一个指针。它的尺寸是4的,不多了。,这就是你问题的答案,

现在,只为了添加一些有用的信息:

p是一个指向4个整数数组的指针。p指向的是4*4==16的大小。(在示例程序中,尝试将int更改为short,您将拥有sizeof(*p) is : 8)

我可以分配p=x,因为类型是正确的,现在p包含x和p的地址与x0相同。p[2][3]x[2][3]*(p[2]+3)相同。p[2]指向x的元素2,p[2]+3指向x[2]的元素3。(所有索引都基于0)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35102077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档