C语言中--是什么意思?

Python017

C语言中--是什么意思?,第1张

->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”.

举个例子:

struct Data

{

int a,b,c

} /*定义结构体*/

struct Data * p/*定义结构体指针*/

struct Data A = {1,2,3}/*声明变量A*/

int x/*声明一个变量x*/

p = &A /*让p指向A*/

x = p->a/*这句话的意思就是取出p所指向的结构体中包含的数据项a赋值给x*/

/*由于此时p指向A,因而 p->a == A.a,也就是1*/

对于一开始的问题 p = p->next这应该出现在C语言的链表,这里的next应该是一个与p同类型的结构体指针,其定义格式应该是:

struct Data

{

int a

struct Data * next

}/*定义结构体*/

…………

main()

{

struct Data * p/*声明指针变量p*/

……

p = p->next/*将next中的值赋给p*/

}

链表指针是C语言的一个难点,但也是重点,学懂了非常有用。要仔细讲就必须先讲变量、指针。

什么是变量?所谓变量,不要浅显的认为会变得量就是变量。套用我们院长的问话:“教室变不变?”变,因为每天有不同的人在里面上课,但又不变,因为教室始终在那,没有变大或变小。这就是变量:有一个不变的地址和一块可变的存储空间。正常情况下,我们只看到变量这个房间里面的东西,也就是其内容,但不会关注变量的地址,但是C语言的指针,就是这个房间的地址。我们声明变量就相当于盖了间房子存放东西,我们可以直接观看房子里的东西,而声明指针,就是相当于获得了一个定位器,当用指针指向某个变量时,就是用指针给变量定位,以后我们就可以用指针找到他所“跟踪”的变量并可以获得里面的内容。

那结构体呢?结构体就相当于是有好几个房子组成的别墅,几个房子绑定在一起使用。假设现在有很多这种别墅分布在一个大迷宫里,每间别墅里都有一间房子。里面放了另一个别墅的位置信息,现在你手拿定位器找到了第一栋别墅,从里面得到了你想要的东西(链表的数据部分),然后把下一栋别墅的位置计入你的定位器(p = p->next),再走向下一栋别墅……如此走下去,知道走到某地下一栋别墅信息没有了(p->next == NULL),你的旅行结束。这就是链表一次遍历的过程。现在你能明白 p=p->next的含义了吧!

写了这么多。希望你能明白。

如果想学好c和C++,链表和指针必须熟练掌握!

1、左移运算符(<<):按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

格式:需要移位的数字 <<移位的次数

例如:3<<2

3转换为二进制是0011,所有数字左移2个位置,空位补0,得到1100,即十进制数12。

2、右移运算符(>>):按二进制把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位(正数补零,负数补1)。

格式:需要移位的数字 >>移位的次数

例如:11 >>2

11的二进制为1011,所有数向右移2个位置,因为11是正数,所以高位补0,得0010,是十进制的2。

扩展资料:

移位运算符是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

数学意义:

1、在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

2、右移一位相当于除2,右移n位相当于除以2的n次方。

这个涉及到++运算符两种不同运算特点

分为:前缀和后缀两种例如题中的(++i)和(i++)分别就是 前缀 和 后缀

一个前缀的++运算符会把运算对象+1 然后再参与整个表达式的运算

例如:s=(++i)+(++i)+(++i)  

等价于s=6+6+6  你一定奇怪怎么全部变成6了?   你要知道++i意味着i的值发生了改变

一开始i就+1变成了4 (你要知道每一次的i的值改变就意味着所有的i都会发生了改变)

那么中间的++i当然就是5最后的++i当然就是6了 (所以全部是6)

所以你题目中第二个pring输出的s = 16 而i=6(因为i被++的前缀运算符执行了3次)

2.一个后缀的++运算符会先用它的运算变量参与整个表达式的运算等到这个被运算的变量出现在下一个表达式中才会看到+1的效果

例如:s=(i++)+(i++)+(i++)  

等价于s=3+3+3  

所以你题目中第一个pring输出的s = 9 而i=6(因为i被++的后缀运算符执行了3次)

懂了吗?