首页 > 代码库 > c语言指针

c语言指针

看了《c和指针》 ,读书笔记如下。

关于指针

1、

int a=12;

int *b=&a;

int **c=&b;

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

期中第二句相当于 int *b; b=&a;

期中第三句相当于 c=&b;*c就是b,也就是&a;**c就是*b,就是a,也就是12

 

2、

char ch = ‘a‘;

char *cp=&ch;

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

一个赋值表达式:
X = Y;
在这个表达式里,符号X的含义是X所代表的地址,这被称为左值,左值在编译时可知,左值表示存储结果的地方;
在这个表达式里,符号Y的含义是Y所代表的地址的内容,这被称为右值,右值在运行时才可知,如无特别说明,右值表示“Y的内容”。

在《C专家编程(中文版)》中第4章,对左值和右值的基本描述,其余的拓展描述你可以自己看。

 

&ch  右值:ch的地址。左值:非法。为什么非法,因为当表达式&ch求值时,它的结果应该储存在计算机的某个地方,但你无法知道它位于何处,所以不是合法左值。

cp   右值是cp的值。左值:cp所处的内存位置。

&cp 右值:指针变量的地址。左值:非法

*cp+1  右值:就是cp指向的ch内容加1.左值:非法

*(cp+1)右值:cp指向的ch的下一个单元内容。左值:cp指向的ch的下一个单元内容的地址

++cp 右值:cp指向的ch的下一个单元内容的一份拷贝。左值:非法。

cp++ 右值:cp指向ch的地址。然后cp再加一。左值:非法。

3、

int *a;

*a=12;

上述是非法的。未初始化,*a指向了哪里呢,覆盖了以前的内容,很容易覆盖一些重要的数据。这句话的意思就是把12存储在a指向内存的位置,但具体哪个位置,不得而知。

 

c语言指针