关于int * s[]和int (*s)[]的区别

yingzijuntuan 2012-02-19 04:22:19
关于int * s[]和int (*s)[]的区别,求大侠给详细的讲解,最好有例子
...全文
1075 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
yingzijuntuan 2012-03-12
  • 打赏
  • 举报
回复
话说还是感觉没有什么区别的。。。
小九 2012-02-25
  • 打赏
  • 举报
回复
int(*s)[]表示s是一个指向int[]的指针,指向数组的指针。

那么int a[3]; int (*s) s[3] = &a;s里面装的其实就是a数组的起始地址。那么int* c = a中的c里面也是装的a数组的起始地址,有啥区别呢。

之前某位兄弟说了,跨度不一样。不信你可以cout<<s+1;跨度一定是sizeof(int)*数组大小,这我的这个例子里就是12个字节。

我觉得这个数组指针就是为了多维数组准备的。
SillyBenzhu 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 leidayihao 的回复:]

个人理解:
int * s[ ]是指针数组, s 指向一个数组,数组里面存储的是int 类型的指针

int (*s)[ ] s 是个指针,指向一个数组,数组里面存储到是 int类型的数值
[/Quote]
++
由括号从内向外分解。
如此美丽的你 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 muyi66 的回复:]

引用 8 楼 neolyao 的回复:

从汇编的角度来讲没区别
怎么会没区别?虽说都是一个数据表,但数据表里的内容是不一样的。一个是一大堆地址,另一个是一大堆整数。

当然,对CPU来说倒是都一样。不过汇编程序员不是CPU。
[/Quote]

看来没认真读题
muyi66 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ivers0n 的回复:]

比较+1的跨度,指针数组+1跨4个字节,数组指针+1跨一个数组大小的字节
[/Quote]应该是跨一个数组元素大小的字节吧。。。
IVERS0N 2012-02-20
  • 打赏
  • 举报
回复
比较+1的跨度,指针数组+1跨4个字节,数组指针+1跨一个数组大小的字节
赵4老师 2012-02-20
  • 打赏
  • 举报
回复
#include <stdio.h>
int *s1[3];//s1是由三个int *组成的数组
int d1_0,d1_1,d1_2;

int (*s2)[3];//s2中保存的是一个指向int[3]类型的指针
int d2[3]={4,5,6};

int main() {
d1_0=0;s1[0]=&d1_0;
d1_1=1;s1[1]=&d1_1;
d1_2=2;s1[2]=&d1_2;

s2=&d2;
return 0;
}

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”

提醒:
“学习用汇编语言写程序”

“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
nuistbaker 2012-02-20
  • 打赏
  • 举报
回复
int * s[]是int *数组,
而int (*s)[]声明的是一个int 的数组

同意fantasy4086的说法。
我的示例代码:
	int * s[100];
int (*s2)[100] ;
int s100[100];
s100[0]=199;
s100[1]=189;

s[0] = 0;
s2 = &s100;
yaningfan 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 yingzijuntuan 的回复:]
关于int * s[]和int (*s)[]的区别,求大侠给详细的讲解,最好有例子
[/Quote]
....[]比*的优先级高,所以s是与[]结合的,把int * 看成一类型。即定义了一个s数组,它的元素类型为指向int的指针;
int (*s)[],因为有括号的作用,所以s是与*结合的,这样可理解为s是一个指针变量,该指针指向一个元素类型为int的数组。
fantasy4086 2012-02-20
  • 打赏
  • 举报
回复
int * s[]和int (*s)[]分别是指针数组和数组指针。
int * s[10] 具有10个元素的数组,每个元素是一个指向int型量的指针(即int型量的地址);
int (*s)[10] 一个指针,指针指向具有10个元素的int数组;也就是说存放表示数组的量的地址
cbzjzsb123 2012-02-20
  • 打赏
  • 举报
回复
lxw19900109 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pathuang68 的回复:]

一个是指针的数组,一个是数组的指针。
[/Quote]
++
  • 打赏
  • 举报
回复
我刚开始学的时候也不懂,当时看了一些例子帮助理解,希望能对你有帮助
#include<iostream>
using namespace std;
int main()
{
//指针数组,本身是数组,元素为指针
int line1[]={1,2,3};//定义数组
int line2[]={1,2,4};
int line3[]={1,2,5};

int* pLine[3]={line1,line2,line3};//指针数组,本身是数组,元素为指针
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cout<<pLine[i][j]<<endl;//访问数组中的指针元素
cout<<endl;
}
}
//下面是数组指针,本身是指针,指向一个数组

int b[3]={1,2,3};
int (*p1)=b;//其实p1就是指针,指向一个一维数组
cout<<p1[1]<<endl;

int a[2][3]={{1,2,3},{2,3,4}};
int (*p2)[3]=a;//其实p2就是指针,指向一个二维数组
cout<<p2[1][1]<<endl;

return 0;
}
ps:数组指针,本身的声明要注意。一般不用数组指针,只要理解就行。希望对你有帮助
jxnuzhouguohong 2012-02-19
  • 打赏
  • 举报
回复
1.指针数组:数组的成员是指针.指针指向的是INT。
2.数组指针:指向一个数组的指针,数组存放的是INT。
pathuang68 2012-02-19
  • 打赏
  • 举报
回复
一个是指针的数组,一个是数组的指针。
whc748227431 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kuzuozhou 的回复:]
int * s[]表示一个数组,数组里的元素都是指针变量,这些指针是整型指针(指向整型);

而int (*s)[]表示一个指针,该指针指向一个数组,这个数组里存放的是整型元素。
[/Quote]+++++
muyi66 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 neolyao 的回复:]

从汇编的角度来讲没区别
[/Quote]怎么会没区别?虽说都是一个数据表,但数据表里的内容是不一样的。一个是一大堆地址,另一个是一大堆整数。

当然,对CPU来说倒是都一样。不过汇编程序员不是CPU。
如此美丽的你 2012-02-19
  • 打赏
  • 举报
回复
从汇编的角度来讲没区别
john 2012-02-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qq120848369 的回复:]
一个是数组,存储了若干int*.
一个是指针,存储了int []数组的地址.
[/Quote]

数组的维数均是动态的。需要初始化。
qq120848369 2012-02-19
  • 打赏
  • 举报
回复
一个是数组,存储了若干int*.
一个是指针,存储了int []数组的地址.
加载更多回复(5)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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