如一个二维数组int a[3][4];int *p;有人说p=a;
答案:3 悬赏:0 手机版
解决时间 2021-11-18 05:42
- 提问者网友:焚苦与心
- 2021-11-17 19:00
如一个二维数组int a[3][4];int *p;有人说p=a;
最佳答案
- 五星知识达人网友:风格不统一
- 2021-11-17 19:08
呵呵,这是个难题。详细给你解释下。
a[3][4]那么a是一个2行3列的数组。也可以看成a是2个长度为3的数组组成的。
p=a的话,下面三种说法都是对的 :
1、把a的首地址给了p
2、把a[0]的首地址给了p 【强烈注意:a[0]可看成一个长度为3的一维数组】
3、把a[0][0]的地址给了p
好好琢磨下。是不是这个道理。
3维数组在内存里面还是线性存储的
a[0][0]
a[0][1]
a[0][2]
……
所以 a,a[0],a[0][0]都是相等的!
给个程序你看看
#include "stdio.h"
#include "conio.h"
main()
{
int a[2][2]={1,2,3,4};
printf("%d\n",a);
printf("%d\n",a[0]);
printf("%d\n",&a[0][0]);
getch();
}
DEV—C++调试结果:
2293600
2293600
2293600追问比较同意你的观点,但是二级题目里
若有定义语句:char s[3][10],(*k)[3],*p;,则以下赋值语句正确的是
A)p=s; B)p=k; C)p=s[0]; D)k=s;
答案C ???追答对:选c。
k指向一个有3个元素的数组的首地址。
p=&s[0][0]也是对的。追问那A呢?本题中A和C有区别吗追答A是错误的。虽然s和s[0]以及&s[0][0]都表示数组的首元素的地址,且地址的值是一样的。但是他们的范围不同啊。p只能指向一个字符型变量的地址。s指代的是一个3*10数组的【元素】的地址。
通俗的比喻一下:
一个方队里的第一个人是个师长。你作为个人看。他只能指挥他自己。
作为队长看,他可以调动整个方队,作为师长看,可调动整个师。
a[3][4]那么a是一个2行3列的数组。也可以看成a是2个长度为3的数组组成的。
p=a的话,下面三种说法都是对的 :
1、把a的首地址给了p
2、把a[0]的首地址给了p 【强烈注意:a[0]可看成一个长度为3的一维数组】
3、把a[0][0]的地址给了p
好好琢磨下。是不是这个道理。
3维数组在内存里面还是线性存储的
a[0][0]
a[0][1]
a[0][2]
……
所以 a,a[0],a[0][0]都是相等的!
给个程序你看看
#include "stdio.h"
#include "conio.h"
main()
{
int a[2][2]={1,2,3,4};
printf("%d\n",a);
printf("%d\n",a[0]);
printf("%d\n",&a[0][0]);
getch();
}
DEV—C++调试结果:
2293600
2293600
2293600追问比较同意你的观点,但是二级题目里
若有定义语句:char s[3][10],(*k)[3],*p;,则以下赋值语句正确的是
A)p=s; B)p=k; C)p=s[0]; D)k=s;
答案C ???追答对:选c。
k指向一个有3个元素的数组的首地址。
p=&s[0][0]也是对的。追问那A呢?本题中A和C有区别吗追答A是错误的。虽然s和s[0]以及&s[0][0]都表示数组的首元素的地址,且地址的值是一样的。但是他们的范围不同啊。p只能指向一个字符型变量的地址。s指代的是一个3*10数组的【元素】的地址。
通俗的比喻一下:
一个方队里的第一个人是个师长。你作为个人看。他只能指挥他自己。
作为队长看,他可以调动整个方队,作为师长看,可调动整个师。
全部回答
- 1楼网友:酒者煙囻
- 2021-11-17 22:15
对于二维数组直接给数组名的话给的是一个指向一维数组的指针(也就是第一行)int a[3][4];int *p;
p=a;之后P是一个指向有4个元素的数组的指针。对p++的话也就是指向了第二排。我也是菜鸟
p=a;之后P是一个指向有4个元素的数组的指针。对p++的话也就是指向了第二排。我也是菜鸟
- 2楼网友:廢物販賣機
- 2021-11-17 20:41
这个要分c和c++的情况。
如果是c的话,这两个都对(其实a的首地址即是a,又是a[0])
如果是c++的话,这样赋值是非法的。编译不能通过。(int (*p)[4];p=a,这样才可以)
如果是c的话,这两个都对(其实a的首地址即是a,又是a[0])
如果是c++的话,这样赋值是非法的。编译不能通过。(int (*p)[4];p=a,这样才可以)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯