a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 127|回复: 0

[程序员] 2012年软件水平初级资格程序员考试重点知识12

[复制链接]
发表于 2012-8-2 08:51:15 | 显示全部楼层 |阅读模式
 int a[10];. o' q+ ~, J# F! x% N0 S

8 C* a( q! z0 T! _* m) v: K  数组名是常量不能为左值(如:a = 5;)
/ k8 V6 b  a2 S5 X# D7 U8 [
3 z2 u9 R& V- M2 V, e% x  不要认为数组元素a代表数组元素的值,它代表数组元素本身,可作为左值使用。
/ m' X0 z8 Z- V) _* x  a0 [
! p  z! ]7 K- o8 F7 ~- W  q+ l7 Z  为指针进行初始化的字符串是只读的
' ~* p/ h- ]) R& c6 q  L
$ S; [1 X  m2 y8 b2 k* z* H  (如:char *p = “hello”; strcpy(p, “world”);这样写是错的)
- }# L4 T* a& u/ m
( |) ^: t$ S7 }9 X6 P7 X4 [; q* Z  为数组进行初始化的字符串是可写的1 `+ O0 w( M/ k$ g- m
. X/ c$ P& }5 ^+ r: o9 j0 P3 o$ A
  (如:char str[10] = “hello”;strcpy(str, “world”);这样写是对的)4 Q7 O; ]4 {' I* s$ W2 v; S5 I

( ~/ p$ m; D2 n* w" X- B  注意:1 b* Y; K% k  C4 C/ C1 W

% d# K2 O9 V' a' n, p* R/ y  一直以为a代表数组的首地址,可以像指针一样进行a++等操作,但是,数组名代表数组首地址,一定是个常量!
2 b5 f7 \+ k4 v+ z' J3 M% c" f7 J0 U0 n3 |1 @$ x7 r4 N5 H8 v" l. ]) T
  所以不能对数组名进行 a++ 或者是 a-- 的操作,因为常量不能被修改。
+ \% ]3 e7 G5 g( R5 a
* h6 s: Y! l. w( ^  但如果定义指向数组的指针 *p=a;
- a8 k- p: o5 J6 c' J* V$ [+ Y/ W. \1 e# X" f1 [4 y/ \
  那么这个指向该数组的指针是可以进行 p++ 或者是 p-- 操作的,指针可以通过这种方式来获取元素。9 ]2 e. g" R0 _4 f" }+ s( I
( w# f8 x$ D9 x
  数组名 a 除了代表数组的首地址外,它还代表特定的类型,在此例中 a 代表了int[10] 这个类型。/ ~2 `5 l. a2 `0 h5 j1 T* V
1 s+ X+ e4 ^  q9 H
  在编译环境内运行 prinrf(“%d  %d)”,sizeof(a),sizeof(p)); 得到了40 4 。# B  N, }) D# Y: [

+ i- R* Y, t3 [  得到这个结果的原因就是数组名 a 代表了它所定义的数组类型int[10],此类型占了10个int型大小的内存,因此是长度是40。: @8 Z( C! U+ d- r( ?
$ q6 ^0 b& b" r+ _0 Y$ ~5 ~
  而指针存放的就是某个地址值,不论它指向的是什么类型的地址,都占有固定的4个字节大小。5 `# d* o7 m: y8 q. }
0 e/ O3 Q: U, `; {$ E* p
  直接访问 —— 用变量名访问。! p- s6 M2 w0 L0 I

! `% u1 r7 V, E, F$ U3 g1 E/ F9 X! y  间接访问 —— 用地址、指针访问。" n5 v9 T7 A* N" P! F. ^- }

5 @% n$ P6 u" T8 n- C8 Z7 G! X: @; C  间接访问:  *(首地址 + 偏移)   偏移=下标值 * sizeof(数组元素类型)( t. w  H8 t& l& y- Z
8 X  Z. T6 s% n$ |2 _0 l. n0 @
  ?    通过数组下标访问数组元素也是间接访问。9 ~" s3 T* ~  }/ ~6 X" v+ z9 d

0 `1 ^2 u4 a- k  a[ i ]  *(a + i* sizeof(数组元素类型))    (每次偏移一个数组元素类型大小的字节数)4 }& ~& B. b! Q

! C  J9 R, C! J# b2 `% j$ }  查看动态数组的大小:
. |( r2 a- v& c! a2 z" o
8 H% z, C, v! s! a! U  }  (注意头文件:#include )$ [8 C7 c: j9 U: y; m# \( t* @
' Z3 r' d4 C; z, s- k+ P
  int *p = (int *)malloc(sizeof(int)*10);6 _# j$ Z  z0 y# m- ~& c. V$ t) n
4 T) b/ o: f* g: r  c/ \
  printf(“%d  ”,_msize(p)) ;. J2 c! O4 m& l
* Q% B+ B  S6 T$ G. K3 l
  输出结果是40。, h1 R( z2 r$ J' m  l

* u8 h3 ^" \% U& K/ U9 R9 z  访问静态数组元素最灵活的方法:
. |. r  l, G9 b5 o" L
$ A% l! n' ]/ `+ G4 E  int a[] = {0,1,2,3,4,5};
& a, w/ X+ n( W$ W6 [' ]5 |: _- N9 }! W* ~# `6 M: L* F$ b
  int i;
8 y+ M5 E/ B6 F# d, Z) c6 W! I+ l
. U' ^) w; M# ~  ?  for( i = 0; i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 07:22 , Processed in 0.212415 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表