int a intp a与int a

2020-11-22 16:59:35 字数 5712 阅读 8920

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]

int p下面等价的语句是,int *p[4];下面等价的语句是

1楼 匿名用户 int p 4 是一维一级指针数组,p是指针数组名,这个数组有4个元素,每个元素都是int行指针 int p 4 是一维数组,p是数组名,这个数组有4个int型元素int p是二级指针,即指向一级指针的指针int p 4 我也不懂 int p 4 是指向一维数组的指针,即指向类型为i...

假设有定义int p那么p 0p分别代表什么

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 类型数据...