C语言中取内容运算

来源:百度知道 编辑:UC知道 时间:2024/06/22 03:32:18
请帮我解释以下这段定义
设m是一个指针表达式,则如果“*m”出现在复制运算符“=”的左边,代表m所指向的那块内存区域,即表示给m所指向的变量赋值,如果“*m”不出现在赋值运算符“=”的左边,“*m”代表m所指向的那块内存区域中保存的之,即表示m所指向的变量的值。
以上定义太复杂了,请大家给我两份例子加以解说吧
*m为什么能指向变量,举个例子

比如 int * p;int a;
这是一个声明。声明的特点就是它总是对称的。比如
p的类型就是 int *;也就是a pointer to int.
*p的类型是int。

如果有p = &a; 显然,&a的类型和p的类型一样,都是地址,int *
*p的类型是 int 而 *&a的类型恰好也是int。
-------------------------------------------------------
其实你只要把*p看成整体,比方说#define b *p
b = a;这个赋值是不是就理解了?左右都是int。
而把&a看成整体,#defien c &a
p = c;左右就都是int *;
--------------------------------------------------------
如果你已经能区分类型了,那么认识指针的本质也就不难了。
指针其实就是一个整数,记录了另一个变量在内存中的位置。
他本身也是一个变量,所也也能赋值。
为了引用他指向的变量,我们在外边加一个*标记。
为了获得一个变量本身的地址,我们在外边加&标记。
如果什么标记都不加,那就代表变量的值本身。

-----------------------------------------------
关于你那句话,其实是个废话。如果把*m换成m,一样成立。比如m = 1.m在等号左边,就是赋值(把1存到m的存储区域里).i = m,m在右边,就是代表m这个值本身。

同理,如果有 int * m = &a; 那么*m = *&a = a,(这里=是等价)把*m 全部看成a就好理解了。

-------------------------------------------------------

如果有int * m; int a;
m 的类型就是一个指针。而且是指向int 的指针。
理由是 *m 的类型是 int (声明语句对称性)。
再回顾指针的本质,它是一个变量