定义一个二维数组a[ ][3]={1,2,3,4,5,6,7};则a[1]是多少
展开全部
a[ ][3]={1,2,3,4,5,6,7}; 初始化为 a[3][3]={....}.
a[1] 是 &a[1][0]。也就是数值为4 的那个元素的地址。
用程序 检验:
#include<stdio.h>
int main(){
int a[ ][3]={1,2,3,4,5,6,7};
printf("%p %p",a[1],&a[1][0]); // 这两个输出值(地址)一样
return 0;
}
a[1] 是 &a[1][0]。也就是数值为4 的那个元素的地址。
用程序 检验:
#include<stdio.h>
int main(){
int a[ ][3]={1,2,3,4,5,6,7};
printf("%p %p",a[1],&a[1][0]); // 这两个输出值(地址)一样
return 0;
}
更多追问追答
追问
那什么时候a[1]代表{4,5,6}???
追答
a[1] 在表达式里 是地址,类似于一个指针指向的地址。任何时候 都 不代表 数值 或 3个数值: 4,5,6。
printf("%p %p",a[1],&a[1][0]); // 这两个输出值(地址)一样
a[1] 是地址,等于 ,&a[1][0] 地址值, 不是那个地址里存放的数值。
展开全部
a[][3]={1,2,3,4,5,6,7};定义了一个数组a,它的每个元素是含有三个元素的数组,a[1]表示第二个元素的首地址,亦即&a[1][0],所以实际上a[1]不能表示二维数组中的任意一个元素,而是表示一个地址,其值为 (int*)((int)a + 4*3)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定义中
a[ ][3]={1,2,3,4,5,6,7};
实际上是这样a[3][3]={1,2,3,4,5,6,7,X,X}//xx的值一般情况下 是0
所以 a[1]的数据类型是int[3]
a[1][0]为4 a[1][1]为5 a[1][2]为6
a[1]便是元素{4,5,6}的一维数组
a[ ][3]={1,2,3,4,5,6,7};
实际上是这样a[3][3]={1,2,3,4,5,6,7,X,X}//xx的值一般情况下 是0
所以 a[1]的数据类型是int[3]
a[1][0]为4 a[1][1]为5 a[1][2]为6
a[1]便是元素{4,5,6}的一维数组
更多追问追答
追问
如果定义一个指针数组*pa[ ][3]={1,2,3,4,5,6,7};p[1]应该才是{4,5,6}吧
追答
你想多了
根本就是不合法的定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a[][3]={{1,2,3},{4,5,6},{7,0,0}}
a[1]={4,5,6}
a[1]={4,5,6}
追问
如果定义一个指针数组*pa[ ][3]={1,2,3,4,5,6,7};p[1]应该才是{4,5,6}吧
追答
完全错误的写法
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身
决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,
至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
下面到底哪个是数组指针,哪个是指针数组呢:
A),int*p1[10];
B),int(*p2)[10];
这里需要明白一个符号之间的优先级问题。“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int*修饰的是数组的内容,即数组的每个元素。那现在我们清楚,这是一个数组,其包含 10 个指向 int 类型数据的指针,即指针数组。至于 p2 就更好理解了,在这里“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名为 p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那现在我们清楚 p2 是一个指针,它指向一个包含 10 个 int 类型数据的数组,即数组指针。
所以你这样写编译器会提示你 cannot convert from 'const int' to 'int *'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a[1]是一个地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询