soaryou 发表于 2007-8-1 18:33:47

[求助]问个指针的问题。

Essential C++中说,指针可以带来程序的弹性,不过貌似没有说清楚。

到底直接对对象操作和使用指针操作有些什么不同之处?

if (*pi !=1024)
*pi=1024

书中的有个例子是这样的,若指针pi不等于1024,则将1024代入*pi,这有点令人费解。
这样做在哪方面提高了弹性??万望赐教。

shawind 发表于 2007-8-1 21:25:14

这个例子没有上下文了么。就这么两行,看着实在是费解。

august 发表于 2007-8-2 07:38:02

Essential C++ 昨天看了下两百七十多页, C++primer 1237页, 真是太大的差别了,
我看我还是先把C学好再去学C++了.................

shawind 发表于 2007-8-2 11:10:08

下了本Essential C++看了下。

int ival = 1024;
int *pi = &ival;
if (*pi !=1024)
    *pi=1024

这是要说明指针的双重性。用*pi可以操作ival的值。而pi指的是ival的地址值。

coolpay64 发表于 2007-8-2 11:35:39

指針的彈性主要在動態記憶體配置上顯現
某吃過東西後再來說吧...

coolpay64 发表于 2007-8-2 11:58:24

在一個一般的靜態陣列中,通常大小也是故定的
int array;
這樣的,其實,這下面兩組指令是一樣的
array = 2;

int* arrayhead = array;
*(attayhead+sizeof(int))=2;
很易明白的,但這個代表著啥嘛?
比如說我在一個二位元檔案讀入兩個short int,很不幸地,用iostream讀入的二位元資料一定是以char陣列存起來
那如何是好呢?
char input; ....

留意short int 是2 Byte大小的
那這是我們便可利用指標轉換的功能
short int result1, result2;
short int* ptr;
ptr = (short int*)(input);
result1 = *ptr;
ptr = (short int*)(input + sizeof(short int));
result2 = *ptr;

直接的轉換便方便得多了

coolpay64 发表于 2007-8-2 12:17:51

上邊說有靜態陣列,那當然有動態陣列
也就是傳說中的new 和 delete
int *array = new int;
這樣便可以建立一個動態陣列
或者說,[填一個40進去大小還不是固定嗎。。]
那樣又如何呢?
int somevar = 155;
int *array = new int;
這個不錯吧。陣列的大小真的可以在程式中改變
不過記住,不再使用的動態陣列要把它們delete
delete array;
存取這些array最白木的方法當然是計算啦
cout << *(array + sizeof(int) *5);
不過世界上有更簡單的方法
cout << array;
兩句基本上是等價的

有人會問,二維陣列/多維陣列該如何?
一般情況下,靜態的二維陣列是一個四方形
int array;
//01234567
//0XXXXXXXX
//1XXXXXXXX
//..XXXXXXXX
//4XXXXXXXX
但如使用動態的話,每一個細項的大小是可以不同的
//0XXXX
//1XXXXXXX
//2XX
//...
如何做到呢?
int **2darray;
一個二級指標,宣告一陣列的指標,再宣告一堆陣列
int element_I_need;
...
2darray = new int* ;
2darray = new int;
2darray = new int;
2darray = new int;
2darray = new int;
用法也是一般的 2darray = XXX;一般,但注意不要overflow
如2darray = XXX; 基本上這指令是可以執行的,但後果自負
delete的時候由最深的開始delete

delete 2darray;delete 2darray;delete 2darray;delete 2darray;
delete 2darray;

當然指標還有很多用法,例如Link List和直接輸入地扯(異常危險,自重):
long address;
int *ptr;
cin >> address
ptr = (int*)address;
cout << *ptr;
因為所有指標也是long來的

那LZ便自己再找找指標的其他用法啦

soaryou 发表于 2007-8-2 18:17:17

好详细。。消化ing~~谢谢某C和shawind。

FantasyDR 发表于 2007-8-2 20:23:21

譬如,当你需要用到多态的时候,指针是你唯一的出路-v-
当你需要传递一个对象作为参数的时候,指针也是很好的选择(引用亦可)。

顶帖里面提到的那个例子很不说明问题,指针显然不是用来干那种无聊的事情的……

john_he 发表于 2007-8-2 21:15:07

指针在操作数组、传递参数和动态分配内存的时候很有用……
页: [1] 2
查看完整版本: [求助]问个指针的问题。