C语言的形参struct list 和 list有什么区别吗?
对于结构体类型变量定义,struct
list和list在C++中是相同的,都是正确的。
但在C语言中,如果没有经过重定义处理,则会编译报错。如:
typedef struct list
{
int data;
struct list *next;
} list ;这样之后,可以使用struct
list
或
list
来定义变量了,如:
struct
list
*
link
;
list
*
link1
;
这个定义应该是C++里面的引用的定义。
因为C里面&只是一个取地址的符号。而且C里面不会在生命的时候去去一个变量的地址
sqlist *L 是声明一个指针
sqlist &L 是声明一个引用
指针与引用的区别在于
(1)引用总是指向一个对象,没有所谓的 null reference .所有当有可能指向一个对象也由可能不指向对象则必须使用 指针.
由于C++ 要求 reference 总是指向一个对象所以 reference要求有初值.
String & rs = string1;
由于没有所谓的 null reference 所以所以在使用前不需要进行测试其是否有值.,而使用指针则需要测试其的有效性.
(2)指针可以被重新赋值而reference则总是指向最初或地的对象.
(3)必须使用reference的场合. Operator[] 操作符 由于该操作符很特别地必须返回 [能够被当做assignment 赋值对象] 的东西,所以需要给他返回一个 reference.
(4)其实引用在函数的参数中使用很经常.
void Get***(const int& a) //这样使用了引用有可以保证不修改被引用的值
{
}
对于结构体类型变量定义,struct list和list在C++中是相同的,都是正确的。
但在C语言中,如果没有经过重定义处理,则会编译报错。如:
typedef struct list
{
int data;
struct list *next;
} list ;
这样之后,可以使用struct list 或 list 来定义变量了,如:
struct list * link ;
list * link1 ;
你所类型重定义的link不能这样用,需要(link*)malloc(sizeof(lnode));加个*才是指针类型
而l=(link)malloc(sizoof(inode));malloc()返回的指针,被你强制装换为link结构体类型,所以l才可以被赋值,因为其不是指针类型,所以l->data是不能用的,不知道你明不明白
没什么不同,不过我觉得你还是写成struct link *lst这样比较好,多了就容易混
没有不一样
struct node* next的struct去掉也没有问题
徐师大c语言期末考试11机
也就是说由于"单向传送"的"值传递"方式,形参值的改变无法传给实参。知识点:知识点\/函数\/形式参数与实在参数,参数值的传递31、C语言程序的基本单位是___答案:函数32、设有说明语句:char a= '\\72';则变量a包含___个字符、答案:133、c语言是一种___(选择面向对象或面向过程)高级程序设计语言。答案:面向过...
经待屋尘: 数据结构.组织代码.如果你叫小明,那全世界这么多同名的,哪知道要找的是哪个小明?于是呼....struct 山坡野岭 {小明 }我知道,要找的是 山坡野岭 的 小明! ....山坡野岭 a a.小明
黔西县17219691837: C语言:结构体数组怎样做形参 - ?
经待屋尘: 形参要加上结构体名;与声明一个结构体数组一样 即 show(struct 结构体名 数组名[]);
黔西县17219691837: 用C语言怎样向一个空顺序线性表中存入一系列数据元素? - ?
经待屋尘: 向一个空顺序线性表中存入一系列数据元素 #include <stdio.h> #include <stdlib.h> /*1.创建结构体-----具体事物的抽象2.创建链表3.创建结点4.插入操作4.1 表头插入4.2 表尾插入4.3 指定位置插入(指定位置的前面)5.删除操作5.1 表头删...
黔西县17219691837: c语言数据结构结构体指针的使用 - ?
经待屋尘: insert 操作,参数是ListNode指针的指针,意味着在insert函数中,会修改ListNode指针的内容,所以传入指针的指针,以便在函数中对形参的修改可以通知影响实参.paint操作,由于不会修改指针的内容,只是读取,所以传递指针的数值就行.
黔西县17219691837: 求C语言高手解释形参sqlist *L sqlist &L的区别 - ?
经待屋尘: 这个定义应该是C++里面的引用的定义.因为C里面&只是一个取地址的符号.而且C里面不会在生命的时候去去一个变量的地址 sqlist *L 是声明一个指针 sqlist &L 是声明一个引用 指针与引用的区别在于 (1)引用总是指向一个对象,没有所谓...
黔西县17219691837: 初学者弱弱的问一个C语言链表问题! - ?
经待屋尘: 当然可以了但要注意的这些函数的返回值类型都是(struct list *),是指针类型,别的跟其它函数完全一样.
黔西县17219691837: c语言链表的形参传递问题,下面这俩个有什么不同吗? - ?
经待屋尘: int create(LinkList *L) //这里要求传一个二维指针,即LinkList *类型 { return OK; } LinkList L; 定义一个L指针 Create(L); //传L的值 , 类型为LinkList ,不是LinkList *类型,故这个是错误的! create(&L); //传L的地址
黔西县17219691837: C语言:结构体数组怎样做形参?字符数组怎样输出?使用%s? - ?
经待屋尘: 1、print函数定义,记得在TC里参数最好这样写:print(stu)struct student stu[5];{ …… } 2、printf函数中的参数 stu[i].name[20] 引用方式是错误的字符串输出应该使用字符串的首地址,正确的格式应该是:stu[i].name
黔西县17219691837: C语言中的函数,形参为结构体,要怎样声明 - ?
经待屋尘: 1 2structa{}; voidpart_1(structa &dir){}
黔西县17219691837: C语言 结构体中的typedef struct {Adjlist ajdlist int n,e}是什么意思 - ?
经待屋尘: typedef struct Adjlist {int n,e; }ajdlist; 我觉得你这么写更容易理解,这段话的意思是定义一个名为 Adjlist的结构体,他的别名是 adjlist,也就是说你可能用 Adjlist或者 adjlist任意一个定义一个结构变量. Adjlist var1; adjlist var2; 这俩是一个意思