指针和数组是一样的吗?数据结构的问题,望高手解答
指针和数组是一样的吗?数据结构的问题,望高手解答我看的是严蔚敏的那本数据结构第22页typedefstruct{ElemType*elem..}SqList;我理解这里的...
指针和数组是一样的吗?数据结构的问题,望高手解答
我看的是严蔚敏的那本数据结构
第22页
typedef struct{
ElemType *elem
..
}SqList;
我理解这里的elem,是这个结构里的一个指针,但后面他说顺序表中第i个元素是L.elem[i-1],这里我混乱了,SqList类型的线性表元素怎么会是L.elem,它是指针啊,就算要他指向数组,也应该重新声明一个数组,在让它指,而且名字也不能用elem,望高手解答,不甚感激 展开
我看的是严蔚敏的那本数据结构
第22页
typedef struct{
ElemType *elem
..
}SqList;
我理解这里的elem,是这个结构里的一个指针,但后面他说顺序表中第i个元素是L.elem[i-1],这里我混乱了,SqList类型的线性表元素怎么会是L.elem,它是指针啊,就算要他指向数组,也应该重新声明一个数组,在让它指,而且名字也不能用elem,望高手解答,不甚感激 展开
4个回答
展开全部
指针是一个数据变量,保存内存中一个地址;
数组是一个数据类型,在内存中开辟一块区域储存相同类型的数据
typedef struct{
ElemType *elem
..
}SqList;
以上为自定义的一个结构,可能你打错了,因为你没有打上结构名称,该结构内有一个ElemType类型的指针,指向内存中一个位置,且创建了一个SqList对象
关于顺序表中第i个元素是L.elem[i-1],你最好看下他这个ElemType*是怎么实现的,由于他要使用索引访问,所以他只有两种选择:
1.将elem定义为动态申请内存的数组
2.将elem定义为链表实现,即elem为链表的节点,然后在结构内部采用运算符重载的方式实现索引访问
以上两个方式都可以达到“顺序表中第i个元素是L.elem[i-1]“的作用
还有L.elem[i-1]应该是写错了,应该是SqList.elem[i-1];
以上回答希望对你有帮助!
数组是一个数据类型,在内存中开辟一块区域储存相同类型的数据
typedef struct{
ElemType *elem
..
}SqList;
以上为自定义的一个结构,可能你打错了,因为你没有打上结构名称,该结构内有一个ElemType类型的指针,指向内存中一个位置,且创建了一个SqList对象
关于顺序表中第i个元素是L.elem[i-1],你最好看下他这个ElemType*是怎么实现的,由于他要使用索引访问,所以他只有两种选择:
1.将elem定义为动态申请内存的数组
2.将elem定义为链表实现,即elem为链表的节点,然后在结构内部采用运算符重载的方式实现索引访问
以上两个方式都可以达到“顺序表中第i个元素是L.elem[i-1]“的作用
还有L.elem[i-1]应该是写错了,应该是SqList.elem[i-1];
以上回答希望对你有帮助!
展开全部
指针是一个指向变量地址的变量,如果它指向一个数组,就跟数组名一样,即指向其数组的第一个元素的地址。反之亦可,数组名也可以作为指针使用。
如下定义:
int aa[10];
int *p
p = aa;
则for(int i = 0;i < 10;i++ )
p[i] = i;
就相当于:aa[i] = i;所以你所说的elem虽是一个指针,但如果它指向一个数组,则elem[i-1]是完全正确的。
反之亦可:如 *(aa+i) = i;也是正确的。
如下定义:
int aa[10];
int *p
p = aa;
则for(int i = 0;i < 10;i++ )
p[i] = i;
就相当于:aa[i] = i;所以你所说的elem虽是一个指针,但如果它指向一个数组,则elem[i-1]是完全正确的。
反之亦可:如 *(aa+i) = i;也是正确的。
更多追问追答
追问
你重新定声明了一个数组aa[10],指针p指向它
但我的书上没有,他就说elem是数组指针,没声明数组,然后后面说顺序表中第i个元素是L.elem[i-1],就是这里我搞不懂,指针怎么变数组了
就拿你的例子来说,按照书上的逻辑,p[i-1]就是表里第i个元素,这个不对吧
追答
首先强调:p[i-1]就是表里第i个元素,这个是正确的。我这里的p[i-1]就相当于是aa[i-1],就是第i个元素。
如果按你说的elem是数组指针,那么elem[i-1]就是第i个元素也是对的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不一样在内存上有区别。指针只是个变量,但是数组还必须要开辟一个若干个数量特定的内存空间。
更多追问追答
追问
那本书写的不对是吧?
追答
什么书。指针和数组 本来就是这样的关系 。一个是定长的而另外一个 只是个变量 。什么书呀?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当你定义SqList类型的L后,一般会对L进行初始化。
正常的情况下,我们都是L.elem = (ElemType *)malloc(nLen*sizeof(ElemType ));
这样的话,就会有内存了。然后就相当于访问指针变量的某一块内存区域。
例如:
char *p = new [10];
*(p+5) = 'a';
那么p[5]就是字符a了。。。
也就是说*(p+5)和p[5]都是对p的第6个内存单元读取内容。。
正常的情况下,我们都是L.elem = (ElemType *)malloc(nLen*sizeof(ElemType ));
这样的话,就会有内存了。然后就相当于访问指针变量的某一块内存区域。
例如:
char *p = new [10];
*(p+5) = 'a';
那么p[5]就是字符a了。。。
也就是说*(p+5)和p[5]都是对p的第6个内存单元读取内容。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询