int( *[4] )是什么类型?

visame 2007-12-04 03:08:14

int( *[4] )是和int * [4]一样吗?
那我可不可以这样写:
typedef int(*[4]) ATYPE
ATYPE a;
这里a是不是等于int*a[4]?
...全文
678 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzarc 2007-12-07
  • 打赏
  • 举报
回复
这个太复杂了, 不过肯定不是同一类型, 因为我的vc6.0在typeid(first)==typeid(second)时返回了一个鸡蛋.
mu_yang 2007-12-07
  • 打赏
  • 举报
回复

还没讨论完?

我觉得根本就不会有这样的写法
int( *[4] )

还有
typedef int(*[4]) ATYPE
这个编译应该通不过
加上后面的";"也应该还是通过不了
linuxship 2007-12-07
  • 打赏
  • 举报
回复
int (*[4])是表示一个行指针,即指向一个含有4个int型数据数组的指针
int * [4] 是表示一个指针数组。

typedef int (*arrayPtr)[4];
arrayPtr ptr;
arrayPtr 是一个指针,这个指针指向一个数组,这个数组有4个int型数据

typedef int *ptr[4];
ptr是一个数组,这个数组中的数据是4个int 型的指针

example:
typedef int* (*T)[4];
arrayPtr 是一个指针,这个指针指向一个数组,这个数组里有4个int型的指针
--------------------------------------------------
更正 ,

int (*)[4]是表示一个行指针,即指向一个含有4个int型数据数组的指针
int (*[4])与 int * [4] 是一样的。
霁云 2007-12-06
  • 打赏
  • 举报
回复


void main()
{
int( *ptr1[4] );
int * ptr2[4];

cout << typeid(ptr1).name() << endl
<< typeid(ptr2).name() << endl
<< boolalpha << bool(typeid(ptr1) == typeid(ptr2)) << endl;
}
/*
output:
int * [4]
int * [4]
true
*/

是一样的,vs2005验证
HelloDan 2007-12-06
  • 打赏
  • 举报
回复

#include<iostream>
//#include<string>
//#include<vector>
//#include<fstream>
using namespace std;

void test(int(*[2]));
void test1(int* [2]);


int main()
{
int dem[2][2]={1,2,3,4};
int (*pt)[2]=dem;
int *ptr[2];
int num1=45;
int num2=50;
int num3=60;
int num4=70;
ptr[0]=&num1;
ptr[1]=&num2;
//int *pt1
test(ptr);
//test(pt);
test1(ptr);

return 0;
}

void test(int *arr[2])
{
cout<<**arr<<" "<<**(arr+1)<<endl;
}

void test1(int* array[2])
{
cout<<**array<<" "<<**(array+1)<<endl;
cout<<endl;
}

//实验证明:int(*[4])和int* [4]的一样的
snake1234 2007-12-06
  • 打赏
  • 举报
回复
楼上的,我觉得什么都没有证明,只证明了函数传递指针类型参数,需要小心,不然出现隐含BUG,找死人.
sssooonnnggg 2007-12-06
  • 打赏
  • 举报
回复
22楼正解....
bicener 2007-12-06
  • 打赏
  • 举报
回复
同意10楼

#include<iostream>
using namespace std;

int main()
{
int arr[3][4];
int *p[4];
//p=&arr[0];
int (*p2)[4];
p2=&arr[0];
return 0;
}

注释部分会报错,
我有的是VC6.0
waji2000 2007-12-06
  • 打赏
  • 举报
回复

#include<stdio.h>

typedef char (* typeL[4]);
void main()
{

char c='a';
char c1[4]={48,49,50,51};
char (*p[4]); //p为含有4个char*指针的数组 p在此为数组名,其为地址常量,不能作这左值
char (*p2)[4]; //p2为一个指针变量,sizeof(p2)=4 即p2可以指向一个有4个char的数组。 可以作为左值和右值
*(int*)(&p2)=(int)c1; //c1在此作为一个地址常量 绕来绕去的赋值法则
p2=&c1; //取地址&操作,返回的指向数组的指针,同样sizeof(c1)返回整个数组的字节数
char * pchar=c1; //当c1作为右值或是形参时,则仅仅是数组第一个元素的地址
const char kk='k';
p[0]=&c1[0];
p[1]=&c1[1];
p[2]=&c1[2];
p[3]=&c1[1];

}
tangshuiling 2007-12-06
  • 打赏
  • 举报
回复
taodm 已经说的很明显了,用typeid(XXX)==typeid(XXXX)证明一下,听多无意!
shager 2007-12-06
  • 打赏
  • 举报
回复
这两个是一个意思吧,你想问的是不是 int *p[4] 和 int (*p)[4]的区别? 前者是一个指针数组,每个成员都是指针,后者是一个指向一个包含四个元素数组的指针
霁云 2007-12-06
  • 打赏
  • 举报
回复
这是很明显的改成5之后,虽然很明显这些指针是由区别的,vc6编译器根本无法区别这些指针的区别
使用vs2005可以区分出来
visame 2007-12-06
  • 打赏
  • 举报
回复
改成5以后,结果不变
霁云 2007-12-06
  • 打赏
  • 举报
回复
VC6编译器可能无法区分,你把其中一个改为5试试
visame 2007-12-06
  • 打赏
  • 举报
回复
我用VC6验证的结果是:
int **
int **
true
kesaihao862 2007-12-05
  • 打赏
  • 举报
回复
这题不会,关注中。。。。。。。。
silencezhujianhua 2007-12-05
  • 打赏
  • 举报
回复
不一样
int (*[4])表是一个指向含有4个int型变量的一个指针,它只是一个指针.
int * [4] 它是一个指针数组,即是一个含有4个指针的数组.
typedef int(*[4]) ATYPE
ATYPE a;
这里a是它只是一个指针和int*a[4]不同.
linuxship 2007-12-04
  • 打赏
  • 举报
回复
int (*[4])是表示一个行指针,即指向一个含有4个int型数据数组的指针
int * [4] 是表示一个指针数组。

typedef int (*arrayPtr)[4];
arrayPtr ptr;
arrayPtr 是一个指针,这个指针指向一个数组,这个数组有4个int型数据

typedef int *ptr[4];
ptr是一个数组,这个数组中的数据是4个int 型的指针

example:
typedef int* (*T)[4];
arrayPtr 是一个指针,这个指针指向一个数组,这个数组里有4个int型的指针
visame 2007-12-04
  • 打赏
  • 举报
回复
听谁?一样不一样?
好困惑。。。
wjvlangz 2007-12-04
  • 打赏
  • 举报
回复
一样,都是内容是int指针的数组
加载更多回复(7)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧