C语言是软件编程的基础,不管你使用什么语言都会有必要用上它的时候,Android的原生开发NDK就是可以在Java层调用C/C++代码,iOS的objective-c也是在C语言上的一层封装实现的,想要做好移动端的开发,C语言是必不可少的技能。指针是C语言的灵魂,指针有各种各样的表达式,那么就让我们来学习一下,这些表达式和配图都是来自《C与指针》。
我们从一个最简单的指针使用讲解:
char ch = 'a';
char *cp =&ch;
这是它的内存指向图,cp是一个指针,用虚线表示指针的间接引用,箭头是指在ch的框上,说明cp是保存着ch的地址,a为ch的内容,?号是ch下一个地址的值。下面我们都按这种图解的方式。
ps:左值、右值表示表达式在等号的左边还是右边。
右值:&ch 表示的是ch变量所在的地址;
左值:他的左值是非法的,因为没有指定一个存储空间,&ch只是int类型的常量,不能给它赋值;
右值:cp表示的是cp指针变量保存的地址值,这里保存的是变量ch的地址;
左值:可以使任意同类型变量的地址
右值:与&ch类型,这里取得是指针变量的地址,是指针的指针地址;
左值:非法,只是一个int类型的常量
右值:间接访问符,取得指针指向的变量ch的值;
左值:设置指针指向的变量ch的值
右值:取得指针指向的变量ch的值 再加1;
左值:非法。
右值:取得ch下一个内存地址的值;
左值:设置ch下一个内存地址的值;
右值:++在前,表达式指向ch下一个内存地址,之后cp的值加1;
左值:非法
右值:表达式指向cp原来的值,之后cp的值加1
左值:非法
右值:指向ch下一个地址的值,之后cp加1;
左值:设置ch下一个地址的值,并cp加1;
右值:先取得cp所指向的地址的值,就是ch的值,然后cp再加1;
左值:设置ch的值,cp加1
右值:是cp指向的地址的值(ch的值),在加1;
左值:非法
右值:从右到左结合,先是cp的地址加1,然后去该地址的值,最后值加1
左值:非法
右值:先执行后面的++,这个返回的是cp的拷贝,然后访问cp指向的地址ch的值,最后ch的值加1,cp加1;
左值:非法
开始的时候对这几个图非常迷糊,多看几次就明白了,再不行就自己动手写代码验证一下。