1楼:匿名用户
int (*p)[3]是数组指针,指向有三个元素的数组 p => a[0]地址 p++ => a[1]地址
int *p是整形指针 p => a[0][0]地址 p++ => a[0][1]地址
所以,p每次移动的地址大小是不同的
若有定义语句:int a[2][3],*p[3]; ,则以下语句中正确的是
2楼:匿名用户
应该选c。
p是一个指针数
组,它有四个元素,每个都是一个指向int型的指针。
a是一个二维数组,它的每个元素都是int型的。
a的错误是因为p是常量(数组名都是指针常量),不可以被赋值。而且p和a的类型也不一致。
bcd都是对p的元素赋值,这是可以的,等号右边应当是一个int型数据的指针(即地址)。c选项中a[1][2]是a的一个元素,是一个int型值,&取了它的地址,所以是正确的。
3楼:匿名用户
int* p[3]是定义了一个大小为3的数组指针,也就是定义了三个int型的指针。
p代表指针数组的首地址,相当一个二维指针。
p[0],p[1],p[2]代表一个int型指针c是对的
“int **p”和“int *p”有什么区别?
4楼:怕不他啊不了
int *p表示的是一级指针,表示p所指向的地址里面存放的是一个int类型的值。
int **p表示的是二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针。
一级指针存放变量的地址,指向的值是变量的内容。如int*p=,p=数组的首地址,*p=数组的第一个值;
二级指针存放一级指针的地址,指向一级指针。如int*p=,int**pp=&p,pp=指针p的首地址,*pp=数组的首地址,**pp=数组第一个值1。
指针数组的数组名传递参数对应为指针的指针即二级指针,二维数组的数组名传递参数对应为数组指针即指向一维数组的指针
一级指针通过形参,可以修改实参中指针所指向的地址中的值。修改不了实参中指针所指向的地址。需要借助二级指针才可以。
5楼:尉诗桃牟画
int*p
:一级指针,表示p所指向的地址里面存放的是一个int类型的值int**p
:二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向int的一级指针)
例如:int
i=10;
//定义了一个整型变量
int*p=&i;
//定义了一个指针指向这个变量
int**p1=&p;
//定义了一个二级指针指向p指针
那么取出10的值方式为:
printf("i=[%d]\n",*p);
printf("i=[%d]\n",**p1);
int a[2][3],*p;p=a;则对w数组元素非法引用的是().a) *(p+2)
6楼:听不清啊
int a[2][3],*p;
p=a; ------- 这个语句才是非法引用。皮之不存,毛将焉附?下面的问题就没法回答了。
7楼:匿名用户
p是数组a的首地址,指向a[0][0],p+2只是移动到了2*sizeof(int)的位置。也就是a[0][2]
c语言问题int a[2][3],*p[3]之后为什么p[0]=&a[1][2]是正确的啊
8楼:匿名用户
int *p[3] 的意思是p中的每一个元素存放的是一个整形变量的地址
所以给p中的元素赋值要取某一个整形变量的地址所以p[0]= &a[1][2]是正确的...意思是把a[1][2]这个变量的地址赋给p[0]
9楼:璐人钇
int a[2][3]就是一个数组,所以a[1][2]就是一个int整数,所以&a[1][2]就是一个int整数的地址
int *p[3]也是一个数组,不过类型是int*,也就是一个int整数的地址,p[0]就是第一个元素而已
10楼:
意思正确,写法上错误:int a[2][3],*p[3];p[0]=&a[1][2];才正确。不知你问的什么意思。
int a[3][4]; int **p; p=a; 合法吗
11楼:匿名用户
嗯,不合法,第一:二级指针不能直接指向a,因为类型不同.第二:指针指向二维数组的方法不对。
如果要改可以这样改:int a[3][4]; int *t, **p;t=a[0],p=&t;,用一下(3)的方法会更简单,也是用的比较多的
给你说说常见指针和数组的用法吧,都很基础,不过还是有难度的,,不需要一下子全部弄懂,学到一定程度后再回来看看就很容易了:
(1)一般指针指向一维数组:例:int *p,a[3]; ,让p指向a数组的方法为:p=a;(或p=&a[0]),指向第i个元素的方法是:p+i;
(2)一般指针指向二维数组:例:int *p,a[3][4]; ,让p指向二维数组a的方法为:p=a[0];,指向数组第i行第j列元素的表示方法是p+i*4+j;
(3)数组指针指向二维数组:例:int (*p)[4],a[3][4];,指针指向二维数组的方法是:p=a;,指向数组第i行第j列元素的表示方法是:*(p+i)+j;
(4)指针数组指向二维数组:例:int *p[3],a[3][4];,指针指向二维数组的方法是:p[3]=;,指向数组第i行第j列元素的表示方法是:p[i]+j;
(5)二级指针和一级指针的用法差不多,模糊点的说,只是二级指针使用时必须要先指向一级指针,不能直接指向某个变量(或数组);
12楼:匿名用户
不合法a的类型是int(*)[4],p的类型是int**,类型不同,不合法(可能有老旧的编译器能通过,目前的主流编译器肯定是会报错的)
int (*p)[4]; p=a; // 这样就可以
13楼:匿名用户
int ia[3][4]=,,}
int (*ip)[4]=ia;//定义一个指针ip,它指向一个含有四个元素的数组。此时,ia指向二维数组的第一个元素(也就是第一行),ip指向第一行的第一个元素。原因就是使用数组名时,会自动转换成指向数组第一个元素的指针。
由于解引用操作符的优先级底于下标操作符,所以要加括号
14楼:小g刀
*p=a合法
a指向数组第一个元素
**p就能取出第一个元素的值
int *p[3]和int (*p)[3] 的区别,举例说明一下.
15楼:匿名用户
这两个其实是数字指针和指针数组的区别。我们一个一个来说明:
(1)int*p[3];//定义了一个三维数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针。
(2)int(*p)[3];//定义了一个指针,这个指针是指向一个三维数组的。
两者之间的区别和联系可以用一个二维数组来阐述:
int *p[3];//定义p[3]为指针数组;int (*q)[3];//定义q为数组指针;int a[4][3];//定义一个二维数组
p[0]=&a[0][0];//可以取a[4][3]中任意元素的地址给p[3]中的元素赋值。q=a[1];//a[1]其实是一个三维数组,其元素包括a[1][0],a[1][1],a[1][2],所以//a[1]就表示这个数组的首地址,这个地址可以用来给q赋值。
扩展资料:
举例说明如下:
(1)数组指针:
int a[3][4]=;int (*p)[4];p=(int(*)[4])a;for(int i=0;i<3;i++)printf("\n");}
(2)指针数组:
int ix=0;int i=0,j=0;int a[3][4]=;
int *p[3];for(ix;ix<3;ix++)p[ix]=a[ix];for(i;i<3;i++)printf("\n");}
16楼:薰衣草的旋律
int *p[3] p是一个数组,此数组有3个元素,每个元素都是int*类型,也就是指向整型数据的指针类型。
int a=10,b=20,c=30;
int*p[3]=;
而int(*p)[3]中的p是一个指向数组的指针,此数组有3个int类型的元素。例如:
int a[3]=; 那么p就是指向这个数组a的指针。
int(*p)[3]=&a; // 这里赋值一定要用取地址符号。也就是取数组a的地址。
不可以这样赋值: int(*p)[3]=a; // error :类型不兼容。a本来是数组类型,是不可以赋值给int(*)[3]这个类型的。
但是这样是可以的int *p1=a; // ok 因为a可以隐式转换为int*类型,其值实际上就是数组第一个元素的地址,也就是&a[0]
17楼:匿名用户
*p[3] 这个是一个
指针数组 它所代表的意思是每一个元素都相当于一个指针变量而(*p)[3] p是一个指针变量,表示指向含有3个整型元素的一维数组
前者可以类似于二维数组 把它看成是由3个一维数组组成的 经常与字符串搭配使用 比较方便操作 把多个字符串放在一个指针数组中
后者是用来引用二维数组的 像a[2][3]这个二维数组 我们既可用指针来引用 又可用(*p)[3]来引用 一般使用(*p)[3]
18楼:林声飘扬
#include
int main()
;int *p[3] ;//表示存贮是3个整型变量地址;
int (*q)[3]; //表示指向3个整型数组元素的一维数组指针//把第一行三个元素地址存放在p指针数组中for( i=0;i<3;++i)
p[i]=&a[0][i];
//输出指针数组中地址所对应值
for( j=0;j<3;++j)
cout<< *p[j]<<" ";
cout< q=a;//把数组a开始地址赋给指向一维数组q; for(i=0;i<2;i++) for(j=0;j<3;j++) cout<< *(*(q+i)+j)<<" "; //输出数组中元素return 0;} 若有定义:int a[3][4],(*p)[4]=a;要引用a[2][3]用(c) 19楼:匿名用户 我倒,你这个是选择题,对吧!看了三遍才看懂题意. 解:int a[3][4]; 定意一个二维数组(*p)[4]=a;这里就是定义p为指向包含4个元素的一维数组的指针变量,那么,你试想一下,二维数组在内存中存放的形式是怎么样的? a赋给(*p)[4], a就是a[0][0]的地址, a就是指向零行首列地址的,它的趋势是指向行的,a+1就是指向一行首列的地址,a+2就是指向2行首列的地址,那么*(a+2)它也是指向2行零列的地址, 它的趋势是指向列的,那么*(a+2)+0与*(a+2)是指向同一个地址,*(a+2)+1就是指向2行1列的地址,*(a+2)+3就是指向2行3列的地址,*(*(a+2)+3)就是a[2][3] *(p+2)是不是指向二行首行的地址呢? *(p+2)+3是不是指向二行三列的地址呢? 那么*(*(p+2)+3)就是a[2][3] 1楼 匿名用户 int p 4 是一维一级指针数组,p是指针数组名,这个数组有4个元素,每个元素都是int行指针 int p 4 是一维数组,p是数组名,这个数组有4个int型元素int p是二级指针,即指向一级指针的指针int p 4 我也不懂 int p 4 是指向一维数组的指针,即指向类型为i... 1楼 p 0 就是 p 就是p所指向的内存中的值 p是p这个指针本身的地址, p的类型是int p 0 就是p 0 的地址,也就是p p 0 就是 p 也是p p 就是前面说的p 0 比如定义了指针int p,x p x 那p, p, p, p各代表的是什么 2楼 匿名用户 p是指向int 类型数据...int p下面等价的语句是,int *p[4];下面等价的语句是
假设有定义int p那么p 0p分别代表什么