www.gsyw.net > 若有定义:int A[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;

若有定义:int A[]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],m;

#include<stdio.h> void main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化 int *p[3];//定义指针数组,每一个元素都是指针 int m;//定义变量m for(m=0;m<3;m++)//循环三次 p[m]=&a[m*4]; /**************开始分析循环语句*****************

#includevoid main(){\x05int a[]={1,2,3,4,5,6,7,8,9,10,11,12};//对数组a初始化\x05int *p[3];//定义指针数组,每一个元素都是指针\x05int m;//定义变量mfor(m=0;m

int (*p)[4];表明p是行指针,即p指向二维数组中的一行.p=a;这一句表示p指向a[0],也就是指向a数组第0行的第0个元素(a[0][0])的地址.p[2]表示p指向a数组的第二行,即指向a[2]行,也就指向a[2][0]的地址.p[2]+3表示行指针指向a数组的第二行(从第0行开始),(从0开始)第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值.p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的.p[4]表示第四行(从0行开始),原因同上.*p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的.

A P+=2 , P=P+2 相当于a[2] ,*(p++)相当于*(p+2) 即a[2]*++p相当于*(++p)相当于a[3] p+=3 ,p=p+3 相当于a[3] *p++相当于*(p++)++*p相当于++(*p) 即++a[0] =2 不懂可以再追问

int a[10]={1,2,3,4,5,6,7,8,9,10}; //定义了一个int类型的数组a,有10个元素,并初始化 int *p=a;//定义了一个指向int类型的指针,并使该指针指向数组a的第一个元素*a是a[0],值是1*(a+2)是a[2],值是3 p[3]是a[3] 值是4*(p+5)是a[5],值是6 如果p=p+4,那么p就是指向a[4]了,p[0]就是a[4],值就是5

答案是D A *p就是*a就是a[0] B p[3]就是a[3]; C *a就是a[0] D a[10] ,a数组只有10个元素,最后一个是a[9], a[10]不属于a,这是内存越界

*p=a,数组名表示地址,该句话的意思就是p=&a[0],p+=2表示p=&a[2];接下来我们看看* ++的优先级,两个优先级是一样的,属于右结合.*(p++)首先计算p++,由于++在后面,所以*(p++)相当于计算*p,然后p++;所以a和c相同,至于d ++*p表示++(*p),将*p的值++.我不知道楼主用的什么编译器.对于我的理解,如果是printf(“%d”,*(p++))这种样式输出的话,a 输出是3,b输出是4,c输出的是4,d输出是4

C指针p指向a的首地址,就是存放a[0]的地址,值为6的数组名是a[5],所以A,B首先排除之后p是指针变量存的是地址,所以为了获取值,应选C

在数组中,下标(即[]里的数值)从0开始算起,如a[0]=1,a[1]=2.a[9]=10;p是指下标的值,指数组中的第p+1个元素,因为p的起始值为0.p+=2等效于p=p+2,所以p=2,即a[2]=3.*++p是指数组中++p所在位置的具体值.

相关搜索:

网站地图

All rights reserved Powered by www.gsyw.net

copyright ©right 2010-2021。
www.gsyw.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com