作者endl (换行)
看板TransCSI
标题Re: [问题] 第一问 C语言 指标
时间Sun May 8 23:45:57 2005
※ 引述《danielroc (流星)》之铭言:
: 希望我这样po没有违反规定
: 如果不符合 我会自D 感谢各位大大阿^^
: 有否高手能稍微解说C的"指标"一下呢
: 我大概只知道它是指向某个记忆体位址
: 用法跟意思不太明白@ @||
: 因为之前在学校上课没有很扎实的上
: 补习班在教有点跟不太上@@
: 请高手解答^^||
/*一般用法*/
int a = 3;
int *aptr = &a;
int b = a;
a
[ 3 ]
0x0010 // 0x0010是a的记忆体位置
b
[ 3 ] 0x0014
aptr
[
0x0010] 0x1234 // aptr的记忆体位置不重要XD
可以把指标想成是一种型态,拿来存记忆体位置用的
而用指标最大的优点,就是可以直接更改「所指向的变数的值」
ex:
*aptr = 2;
b = 1;
这时:
a b aptr
[ 2 ] 0x0010 [ 1 ] 0x0014 [0x0010] 0x1234
| |
└-------------------┘
*aptr这一行,会跑回到变数a的值,所以当我们
使用 *aptr = 2;时,就会直接更改到变数a的值了~~
而 b = 1;这一行,因为 b当初只有跟 a要值,没有要记忆体位置
所以不管b怎麽变,都不会影响到a...当然要恶搞也行...XD
/*关於array*/
而指标和array也有很大的关系,如下:
aptr [
0x0020]
[ 0 ]
0x0020 // 一个int占4个bytes,所会以4递增
[ 9 ] 0x0024
[ 3 ] 0x0028
[ 5 ] 0x002C
这时 aptr[0] 会是0x0020中的值,也就是0
cout << aptr[0] << endl; // 印出的为0
cout << *aptr << endl; // 印出的也是0唷!
cout << aptr[1] << endl; // 印出的是9
cout << *(aptr+1) << endl; // 印出的也是9~~XD
当然,若执行 aptr[1] = 100; 的话,0x0024那个位置的值,
会变成100~~~
/*关於字串*/
C-style的字串,也跟指标有着很大的关系
char *cstr = "abc";
cstr [0x0030]
[ a ] 0x0030
[ b ] 0x0031
[ c ] 0x0032
[
'\0'] 0x0034 // !!!~~~注意!有个null Character在这边
当我们试着把cstr印出来时呢...
cout << cstr << endl; // 印出的将会是 abc 唷!而不会是 0x0030
cout << *cstr << endl; // 印出的只有 a 而已!~~~
C-style的字串,最後面一定要多一个null Character!在印出字串时,
这个null Character会当做是结束符号,若不加上null Character,将
会灾情惨重:
char bad_cstr[3];
bad_cstr[0] = 'a'; bad_cstr[1] = 'b'; bad_cstr[2] = 'c';
cout << bad_cstr << endl; // abc!#!@$@#$ 这个程式执行无效...
然後程式有九成的机会就当掉了...XD
若是用char *cstr = "abc";这种用法,会自动帮你补上null Character
,但是这是个const char*型态,不能更改里面的字元,要注意~~~
//还有关於物件和结构,不过我要赶明早的作业,所以...:P
//有错请鞭...Orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.220.37
1F:推 Jasy:Push 218.187.11.143 05/08
※ 编辑: endl 来自: 140.123.220.37 (05/08 23:47)
2F:推 deepdish:中正来的 C++ 换行好厉害︿︿” 140.115.201.17 05/08
3F:推 danielroc:推推推^^ 140.122.24.147 05/09
4F:推 endl:话说我也是转学生呀...XDD 140.123.220.37 05/09
5F:推 Jasy:什麽系可以透露一下吗? 218.187.11.143 05/09
6F:推 endl:资工->资工的...^^" 140.123.220.37 05/09
7F:推 darkstar0412:推!!很强!!218.162.188.208 05/09
8F:推 bearboy:推喔 219.81.146.171 05/09