C指针解析 ------ 指针表达式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

所谓的指针表达式是指一个表达式,其结果是一个指针。

例1.

int  a,b;

int array[20];

int *p;

p = &a;             //&a 就是一个指针表达式,因为&a的结果就是一个指针。

int **q = &p;     //&p也是一个指针表达式。

*q = &b;            //*p和&b都是一个指针表达式。

p = array;

p++;                   //同理,这也就是指针表达式。

例2.

char *arr[10];

char **parr = arr;           //arr可以看做是一个指针,代表数组的首地址,这样,arr也是一个指针表达式。

char *s;

s = *parr;                        //很容易看出*parr也是一个指针表达式。

s = *(parr+2);                 //同理,*(parr+2)是一个指针表达式。

因为,指针表达式的结果是一个指针,所以指针表达式也满足指针的四个要素,即,指针的类型,指针所指向的类型,指针的值或指针所指向的内存地址,以及指针自身占据的内存。

另外,需要注意,当一个指针表达式的结果指针已经明确地具有指针自身占据的内存的话,那么这个指针表达式就是一个左值,可以进行自加,自减等操作,否则的话,这个指针表达式就不是一个左值。如例1中的&a就不是一个左值,因为没该表达式的结果指针也就是a的地址并没有占据内存,所以不是一个左值,当然不能进行自加等操作了,但*q就是一个左值,因为在定义时,已经给指针q分配空间了。

时间: 2024-12-15 06:55:30

C指针解析 ------ 指针表达式的相关文章

C指针解析 ------ 指针的算术运算

本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 指针是一个特殊的变量,表示一个地址,而地址能够上减去或加上一个整数,从而能够表示新的地址. 以下通过一段代码来分析指针的算术运算: #include <stdio.h> int main(){ int i; char str[]={'a','b','c','d','e'}; int *p = str; char *q = str; q++; p++; printf("

C指针解析 ------ 指针的概念及要素

 本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 指针在C语言中的地位,不用多说. 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存中的一个地址.指针有四个要素,分别是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占据的内存区.所以要理解指针,就必须要搞清楚这四个要素.下面分别来说. 先来看一个例子,通过例子来直观的看指针这四个要素到底代表什么: 例1. (1) int *ptr

右左法则----复杂指针解析

核心提示:因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法 因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的.如何解读复杂指针声明呢?右左法则是一个既着名又常用的方法.不过,右左法 则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法.C标准的声明规则,是用来解决如何创建声明的,而右左法则是用 来解决如何辩识一个声明的,两者可以说是相反的.右左法则的英文原文是这样说的: The right-left rule:

解析 指针数组,数组指针,函数指针

一 :关于指针和堆的内存分配 指针数组 : 一个数组里放的都是指针,我们把他叫做指针数组 int * a[10]; 由于它是一个数组,他是不能从堆空间里申请空间的. 只能做个循环,每个元素去申请空间,或者每个元素去指向另外的地址空间. 数组指针 : 一个指向一唯或者多唯数组的指针: int * b=new int[10]; 指向一唯数组的指针b ; 一些例子: int (*b2)[10]=new int[10][10]; 注意,这里的b2指向了一个二唯int型数组的首地址. 注意,这里的b2的类

指针理解——复杂指针解析

右左法则 首先从最里面的圆括号看起,然后往右看,再往左看,每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有东西,就跳出圆括号,重复这个过程直到整个声明解析完毕. 举例:int * (* (*fun) (int *)) [10] 首先,fun是一个指针,因为他先跟*(绿色色)结合.fun指向的是一个函数,该函数特点是有一个整形指针做参数,并且返回值仍然是一个指针(品红色).其返回值指针指向的内容是个数组.所指向的数组有10个元素,每个元素都是int *类型. 练习: 用变量a给出下

C指针解析 ------ 运算符&amp;和*

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 & 是取地址运算符,* 叫做指针运算符或间接运算符.&a 的运算结果是一个指针,指针的类型是a的类型加上*,指针所指向的类型是a的类型,指针的值也就是指针所指向的内存区就是a的地址. *p的运算结果就多了,总之,*p的结果是p所指向的东西,这个东西有这些特点: 它的类型是p所指向的类型,它所占用的地址是p所指向的地址. 看下面的例子: int a = 5; int b;

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

承诺c指针 (1)指针是地址

(1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = &foo; printf(" foo...%d\n", foo); printf("*foo_p...%d\n", *foo_p); printf(" &foo...%p\n", &foo); printf(" foo