当前位置: 代码迷 >> C语言 >> [求助]为什么pa++;//也是指针表达式
  详细解决方案

[求助]为什么pa++;//也是指针表达式

热度:124   发布时间:2007-02-07 17:00:26.0
[求助]为什么pa++;//也是指针表达式
inta,b;
intarray[10];
int*pa;
pa=&a;//&a是一个指针表达式。
int**ptr=&pa;//&pa也是一个指针表达式。
*ptr=&b;//*ptr和&b都是指针表达式。
pa=array;
pa++;//这也是指针表达式.



为什么pa++;//也是指针表达式?
指针不是必须有*号吗?
还有&进行表示吗?
搜索更多相关的解决方案: 指针  表达  

----------------解决方案--------------------------------------------------------
pa只个在内存中的地址
*是取值运算 *pa的意思就是取pa这个地址中的值

[此贴子已经被作者于2007-2-7 17:06:15编辑过]


----------------解决方案--------------------------------------------------------
声明了一个数组TYPEarray[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE[n];第二 ,它是一个指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表达式是错误的。

中的意思array++却表达式错误的,
那什么时候正确什么时候错误那?


----------------解决方案--------------------------------------------------------
array++数组名当然不能被副值运算
如果是array+1就可以了
----------------解决方案--------------------------------------------------------
什么是赋值运算那?
----------------解决方案--------------------------------------------------------
array++不是定值就可以运算了吧?
----------------解决方案--------------------------------------------------------
a=1
a++
a--
a=a++
a=1*11*111
都是副值运算

----------------解决方案--------------------------------------------------------
[QUOTE]

[QUOTE][URL=http://www.bc-cn.net/Article/kfyy/cjj/jc/200512/2630]http://www.bc-cn.net/Article/kfyy/cjj/jc/200512/2630[/URL]
[/QUOTE]2.3 代码行内的空格
l 【规则 2-3-1 】 关键字之后要留空格。象 const 、 virtual 、 inline 、 case 等关键字之后至少要留一个空格,否则无法辨析关键字。象 if 、 for 、 while 等关键字之后应留一个空格再跟左括号‘(',以突出关键字。

l 【规则 2-3-2 】 函数名之后不要留空格,紧跟左括号‘(',以与关键字区别。

l 【规则 2-3-3 】 ‘('向后紧跟,‘)'、‘,'、‘ ; '向前紧跟,紧跟处不留空格。

l 【规则 2-3-4 】 ‘,'之后要留空格,如 Function(x, y, z) 。如果‘ ; '不是一行的结束符号,其后要留空格,如 for (initialization; condition; update) 。

l 【规则 2-3-5 】 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ = ”、“ += ” “ >= ”、“ <= ”、“ + ”、“ * ”、“ % ”、“ && ”、“ || ”、“ << ” , “ ^ ”等二元操作符的前后应当加空格。

l 【规则 2-3-6 】 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ -- ”、“ & ”(地址运算符)等前后不加空格。

l 【规则 2-3-7 】 象“ []”、“ .”、“->” 这类操作符前后不加空格。

2 【建议 2-3-1 】 对于表达式比较长的 for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))

void Func1(int x, int y, int z); // 良好的风格

void Func1 (int x,int y,int z); // 不良的风格

if (year >= 2000) // 良好的风格

if(year>=2000) // 不良的风格

if ((a>=b) && (c<=d)) // 良好的风格

if(a>=b&&c<=d) // 不良的风格

for (i=0; i<10; i++) // 良好的风格

for(i=0;i<10;i++) // 不良的风格

for (i = 0; I < 10; i ++) // 过多的空格

x = a < b ? a : b; // 良好的风格

x=a<b?a:b; // 不好的风格

int *x = &y; // 良好的风格

int * x = & y; // 不良的风格

array[5] = 0; // 不要写成 array [ 5 ] = 0;

a.Function(); // 不要写成 a . Function();

b->Function(); // 不要写成 b -> Function();

[/QUOTE]
----------------解决方案--------------------------------------------------------
请看我上面发的~
以后注意格式,易读~~


我也是刚知道
----------------解决方案--------------------------------------------------------

指针就像一个容具,它里面放着地址,区别就是有些容具的瓶口是开的,里面可以换水,有些是封闭的,里面的水是不会变化的。
比如 a[5]……
里面的a就是个封闭的容器,永远指向数组的第一个地址即&a[0],因此不可以自身相加,a++是非法的,a+1是可以的。
int **p p是个开口容器,当然p里面可以是任何值的地址,包括指针。


----------------解决方案--------------------------------------------------------
  相关解决方案