int (*p)[4]和int * p[4]到底是神马意思啊
int*p[4]中定义的p是二级指针吗,int(*p)[4]是不是既可以表示一级指针又可以表示为二级指针...
int *p[4]中定义的p是二级指针吗,int(*p)[4]是不是既可以表示一级指针又可以表示为二级指针
展开
3个回答
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
int *p[4]中定义的p是有4整型指针的数组
int(*q)[4] q是指向具有4个整型元素的数组的指针!
用法
int f[10];
int x[4],y[4],z[4],w[4];
int a,b,c,d;
int *p[4] ={&a,&b,&c,&d};
p[0]= &a;p[1]=b;p[2]=&c;p[3]=&d;
和
int *p[4] ={x,y,z,w};
p[0]= x;p[1]=y;p[2]=z;p[3]=w;
//*(p[0]+1) == x[1]
p[0]+1 == x+1;
都是可以的;
初始化:
int(*q)[4] ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容;
int(*q)[4] ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针;
int(*q)[4] =x ; //不可以 q 是int(*)[4]; x是int* 不兼容;
int(*q)[4] =&x ; //q,&x 都是 可以int(*)[4] ;
int(*q)[4] =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
赋值:
q =x ; //q 不可以 q 是int(*)[4]; x是int* 不兼容;
q ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容,不可以这样赋值;
q ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针,是个4个整型元素数组的指针;
//{} 内是int *[4] 是个int *指针的数组
q =&x ; //可以q,&x 都是 int(*)[4] ;
q =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
*q 是个四个元素的数组
(*q)+1 数组第一个元素的地址
(*q)[1] 数组第一个元素
int(*q)[4] q是指向具有4个整型元素的数组的指针!
用法
int f[10];
int x[4],y[4],z[4],w[4];
int a,b,c,d;
int *p[4] ={&a,&b,&c,&d};
p[0]= &a;p[1]=b;p[2]=&c;p[3]=&d;
和
int *p[4] ={x,y,z,w};
p[0]= x;p[1]=y;p[2]=z;p[3]=w;
//*(p[0]+1) == x[1]
p[0]+1 == x+1;
都是可以的;
初始化:
int(*q)[4] ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容;
int(*q)[4] ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针;
int(*q)[4] =x ; //不可以 q 是int(*)[4]; x是int* 不兼容;
int(*q)[4] =&x ; //q,&x 都是 可以int(*)[4] ;
int(*q)[4] =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
赋值:
q =x ; //q 不可以 q 是int(*)[4]; x是int* 不兼容;
q ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容,不可以这样赋值;
q ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针,是个4个整型元素数组的指针;
//{} 内是int *[4] 是个int *指针的数组
q =&x ; //可以q,&x 都是 int(*)[4] ;
q =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
*q 是个四个元素的数组
(*q)+1 数组第一个元素的地址
(*q)[1] 数组第一个元素
追问
定义时的意思我基本上都明白,就是用指针变量的时候感觉很糊涂
追答
一般情况,定义一般指针就可以了!
数组指针作用不是很大,因为对数组的引用通常是不包括数组长度的,
参数传递时长度要另外传递进来。
而数组指针把长度固定死了。不适宜传给函数。
而C又没有可变数组,数组指针只能指向定长数组。所以很少使用。
实际上只要看到,那种写法,能够理解就可以了!
真正是用的都是一般的指针和指针的指针
也就是一级,二级和多级指针
二级以上使用的也很少!
倒是函数的指针用的还多些!
所以只要理解指针本身的概念就够了,指针就是带类型的地址!
可以通过这个地址获得地址中的值 ( *p )!
变量和数组(变量族)都有一个地址,
&用于获取该地址
* 用于取指针所指地址中的值。
变量赋值,是向该地址存入所赋的值,
赋值给别的变量是
把该地址中的变量的值
存入另一个变量的地址中,
所以可以通过地址本身存取变量的值
指针的值是一个地址,通过指针的值( 就是该地址)可以读写地址中的值。
如果是函数指针,可以调用函数(函数名本身就是函数指针)。
这就是指针的用途。
指针也有地址他的地址可以付给高一级的指针
一级指针的地址可以赋值给二级指针
也就是这些了!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *p[4]定义一个指针数组,这个数组的每个元素都一个指向int数据类型的指针。
比如:
int a=1,b=2,c=3,d=4;
int *pa=&a,*pb=&b,*pc=&c,*pd=&d;
int *p[4]={pa,pb,pc,pd};
int (*p)[4]定义一个指向一个一维数组的指针,这个一维数组数据类型是int,共有四个元素。
比如:
int a[4]={1,2,3,4};
int (*p)[4];
p=a;
比如:
int a=1,b=2,c=3,d=4;
int *pa=&a,*pb=&b,*pc=&c,*pd=&d;
int *p[4]={pa,pb,pc,pd};
int (*p)[4]定义一个指向一个一维数组的指针,这个一维数组数据类型是int,共有四个元素。
比如:
int a[4]={1,2,3,4};
int (*p)[4];
p=a;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询