C结构体变量2种运算(比如链表的结点)(区别与java)

a结构体变量,只能做两种运算,

整体引用(赋值,参数传递)

或访问成员(点运算—地址方式简化,地址方式)(见最后的图片)

case万:

结论:java里面的class Node ; Node p; p是这个实体本身,这个p指针直接进行节点间操作

而C里面的 struct LNode *p 只能只能间接去操作一个节点并不是这个节点本生

C提供->运算符直接操作成员变量

struct LNode{
    int val;
    struct LNode *next;  //不能出现 struct LNode next这种啊
}

struct LNode n1,n2;
n1.val=100;

//整体赋值
n2 = n1  

//传参数
function(struct LNode n){
   可以操作变量n了
}

实参这样写  function(n1)

最大的区别与Java的就是n1是不能直接输出的,java里面的直接输出是地址
n1.next = n2 ,而在c里面,n1.next=&n2

在java里面的头指针head是一个实体(链表节点) , 而C里面就是一个指针变量,里面存的是地址
java里面的指针就是这个节点本生,比如LNode p = n2, p.next 就是下一个节点了

而C中 LNode *p = &n2 ;  p指向了这个节点,而不是这个节点本生,(以后见到指针马上想到这个实体)
p不是这个节点n2实体本生,所以不能直接操作,只能间接。

  

时间: 2024-10-21 04:23:35

C结构体变量2种运算(比如链表的结点)(区别与java)的相关文章

C语言 指向结构体变量的指针

一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Student struct Student *pStruct // 结构体类型 * 指针名; 通过指针来引用结构体中的成员,有三种方式 demo: 1 # include <stdio.h> 2 # include <stdlib.h> 3 /* 4 1.使用->引用结构体成员 5

结构体变量的sizeof计算

结构体字节对齐准则: 1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除: 2. 结构体每个成员相对于结构体首地址的偏移量都是当前成员大小的整数倍,如有需要编译器会在成员之间加上填充字节: 3. 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节. 4. 在嵌套结构中需要把内部‘打散'后再进行对齐计算. // sizeof(结构体).cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #inc

使用结构体变量存储学生姓名和课程成绩,计算平均分及查找不及格同学姓名及分数

1 struct Student //声明Student类型结构体变量 2 { 3 char name[20]; 4 int score[5]; 5 }; 6 typedef struct Student Stu; 7 8 void main() 9 { 10 11 Stu stu[3]; 定义Student类型变量数组 12 int i,j; 13 for(i=0;i<3;i++) //输入学生姓名和成绩 14 { 15 printf("please input student[%d]'

(struct)结构体变量作为函数参数调用的方法小结

结构体变量.结构指针变量.结构数组作为函数的参数应用实例分析 struct stud { long int num; float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/ void funvr(struct stud t) { t.num=2000101; t.score=71.0; } /*结构体数组作为函数的参数,修改后的元素的成员值能返回到主调函数*/ void funar(struct stud t[]) //void funar(stru

C语言中两个相同类型的结构体变量之间是可以相互直接赋值的

C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量之间是可以相互赋值的.但是要注意指针的浅层复制问题. 下面是一个简单的验证代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdlib.h> struct test

结构体的两种定义方式

typedef struct 用法小结 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等).在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. typedef与结构体结合使用 typedef struct tagMyStruct { int iNum; long lLength; } MyStruct; 这句话实际上完成两个

对于结构体变量赋值的误区

以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对.于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题.还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不对,原因就和之前他理解的一样. 于是晚上到住处在网上查了一下,说是可以的,因为是同样的数据类型,而C

C的日记-结构体变量和结构体数组

[结构体] 定义结构体的两方式    <1>    struct student{};        struct student a={10001,"云中",'M',"北京"};    <2>    struct student{        }a={10001,"云中",'M',"北京"};定义结构体数组a换成a[],struct student stu[3]={{..},{..},{..}};

5/29 c的结构体变量

1.结构体变量的初始化和引用. 在定义结构体变量的时候,可以对它初始化,即赋予初始值.然后再引用这个变量. (1)在定义结构体变量时可以对它的成员初始化.初始化列表是用花括号括起来的一些常量,这些常量一次赋给结构体变量的成员.注意,我们要对结构体变量初始化,而不是对结构体类型初始化. (2)可以引起结构体变量中成员的值,引用方式为  结构体变量名,成员名.如student1.num=10010;“.”是成员运算符,他在所有的运算符中的运算符的优先级最高,因此可以吧student1.num作为一个