C语言实现数据结构的两种声明结构体的方式有什么区别
数据结构 顺序表结构的数据结构体
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
第一种声明方式
SqList SeqlistInsert(SqList L, int i, ElemType x)
第二种声明方式
SqList SeqlistInsert(SqList *L, int i, ElemType x)
加星号 " * "和不加*有啥区别,主要是结构体加了* 号如何看这个数据和操作的问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
C语言函数传递参数是值传递,也就是会将实参复制一份,然后再给函数使用。
比如这个函数,
S1会被复制一份,然后传给SeqlistInsert()函数,如果SeqlistInsert()函数尝试对S1进行修改,比如SeqlistInsert(S1, 1, E1)中有这个语句
这里修改的并不是我们最开始定义的S1(SqList S1;处定义的S1),而是复制后的S1,这么做的结果就是我们没有办法修改之前定义的S1。
另一种形式就不一样了,
这里S1是指在,它的值就是S1所在的内存地址。我们如果想修改S1的值,我们只需要添加
就可以修改之前定义的S1了。因为虽然传入SeqlistInsert()函数的也是S1的复制体,但它们的值都是S1的内存地址,所以我们可以用这种方式修改S1中元素的值。
如果还有不懂,请百度"C语言函数值传递"。
一个是传指针一个是传副本,通常不会传副本,一是大量占用内存二是对对象修改不灵活。建议你找个c基础的书开始看。
这个是C的语法问题,跟结构体没什么关系。
这个区别啊,其实挺简单的,SqList *表示结构体指针
访问区别 :结构体指针访问结构体成员要 用-> 访问符号,结构体变量的话,用.访问其成员
函数传参区别: 传了一个指针过去,那么在函数内部修改的时候,是通过指针寻找真正的内存空间直接修改主函数的结构体成员数据,而单纯的传入结构体变量到一个函数内部,那么就是值传递。
动态开辟内存区别:使用指针,可以动态的开辟多个结构体变量的大小。
下面示例
描述有误,怎么能说加不加星号有什么区别?加不加星号类型都不同了,还用同一个变量名,有误导嫌疑。我觉得如果谁写代码,对于同一类型的对象、指针,在不同的函数中使用一样的变量名,就有一定误导性。我觉得首先从变量命名上就要保持区别。比如
char c
和char *p
,SqList sl
和SqList *psl
,加上p
前缀表示其是指针类型。