為生存而奔跑
::
首頁(yè)
::
聯(lián)系
::
聚合
::
管理
271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks
留言簿
(5)
給我留言
查看公開(kāi)留言
查看私人留言
我參與的團(tuán)隊(duì)
隨筆分類(lèi)
Algorithm(73)
C#(19)
Design Pattern(16)
Effective STL / C++ (12)
Information Retrival / Data Mining(13)
Java(25)
Linux kernel(2)
MFC(16)
Python(5)
TopCoder(1)
Ubuntu&Linux(56)
技術(shù)(12)
無(wú)聊(2)
雜(22)
隨筆檔案
2011年5月 (1)
2011年4月 (6)
2011年3月 (21)
2011年2月 (9)
2011年1月 (12)
2010年12月 (2)
2010年11月 (3)
2010年10月 (6)
2010年8月 (13)
2010年7月 (11)
2010年6月 (7)
2010年5月 (21)
2010年4月 (15)
2010年3月 (16)
2010年1月 (5)
2009年12月 (18)
2009年11月 (18)
2009年10月 (19)
2009年9月 (8)
2009年8月 (42)
2009年7月 (15)
2009年4月 (3)
相冊(cè)
Girl
搜索
積分與排名
積分 - 328893
排名 - 74
最新評(píng)論
1.?re: Invoke與BeginInvoke
講得很好,清晰明了
--YJJ
2.?re: Invoke與BeginInvoke
講的這么好, 為啥沒(méi)有人頂呢
--zhouandke
3.?re: 數(shù)組分割問(wèn)題
轉(zhuǎn)載請(qǐng)注明
--呵呵
4.?re: HDU 3415 單調(diào)隊(duì)列
話說(shuō),sum數(shù)組為什么只開(kāi)10W就能過(guò),如果n=100000,k=100000,明顯要開(kāi)20W啊
--KissLL
5.?re: GDB 單步調(diào)試
文章太強(qiáng)大了。
--kangear
閱讀排行榜
1.?GDB 單步調(diào)試(33345)
2.?Emacs教程(20836)
3.?解決“windows無(wú)法連接到選定網(wǎng)絡(luò) 網(wǎng)絡(luò)可能不在區(qū)域中”(11475)
4.?Invoke與BeginInvoke(9598)
5.? Eclipse下搭建SWT開(kāi)發(fā)環(huán)境(8011)
評(píng)論排行榜
1.?C/C++沒(méi)有數(shù)組(12)
2.?HDU 3415 單調(diào)隊(duì)列(8)
3.?Ubuntu Linux常見(jiàn)中文輸入法匯總(7)
4.?word畫(huà)圖里自選圖形里面的連接符不能用(5)
5.?<編程之美>數(shù)組分割問(wèn)題(3)
指針做參數(shù)
百度一個(gè)筆試題
#include
<
iostream
>
using
namespace
std;
struct
complex_t
{
int
real;
int
imag;
}
;
int
create(complex_t
*
p, unsigned
int
n)
{
p
=
new
complex_t[n];
if
(p
==
NULL)
return
-
1
;
else
return
0
;
}
int
main()
{
complex_t
*
comps
=
NULL;
unsigned
int
num
=
0
;
cin
>>
num;
if
(create(comps,num)
<
0
)
{
printf(
"
create failed\n
"
);
return
-
1
;
}
/**/
/*
if(comps == NULL)
{
cout<<"comps is NULL\n";
return -1;
}
*/
//
comps = new complex_t[num];
long
long
int
sum
=
0
;
unsigned
int
pos
=
0
;
cin
>>
pos;
while
(pos
<
num)
{
cin
>>
comps[pos].real
>>
comps[pos].imag;
cin
>>
comps[pos
+
1
].real
>>
comps[pos
+
1
].imag;
sum
+=
comps[pos].real
*
comps[pos
+
1
].real
+
comps[pos].imag
*
comps[pos
+
1
].imag;
pos
+=
2
;
}
cout
<<
"
sum is
"
<<
sum
<<
endl;
return
0
;
}
很容易被忽悠的一個(gè)地方是,create函數(shù)的第一個(gè)參數(shù),類(lèi)型時(shí)complex_t * p。 然后,在create里面給p分配了一塊存儲(chǔ)空間。 乍一看,因?yàn)槭侵羔樧鰠?shù),所以會(huì)傳遞回去。其實(shí)不然。在這里,相當(dāng)于,首先,main函數(shù)中調(diào)用create函數(shù)時(shí),把comps賦值給p。即指針p指向與comps相同的一段存儲(chǔ)空間。 但是,在create里面,p=new complex_t[n],使得p又指向了一塊新的存儲(chǔ)空間。而此時(shí),comps還是指向原來(lái)的存儲(chǔ)空間。所以,在create里面對(duì)p做的更改對(duì)comps并沒(méi)有影響。
一個(gè)解決方法是使用指向指針的指針。如下
#include
<
iostream
>
using
namespace
std;
struct
complex_t
{
int
real;
int
imag;
}
;
int
create(complex_t
**
p, unsigned
int
n)
{
*
p
=
new
complex_t[n];
if
(p
==
NULL)
return
-
1
;
else
return
0
;
}
int
main()
{
complex_t
*
comps
=
NULL;
unsigned
int
num
=
0
;
cin
>>
num;
if
(create(
&
comps,num)
<
0
)
{
printf(
"
create failed\n
"
);
return
-
1
;
}
/**/
/*
if(comps == NULL)
{
cout<<"comps is NULL\n";
return -1;
}
*/
//
comps = new complex_t[num];
long
long
int
sum
=
0
;
unsigned
int
pos
=
0
;
cin
>>
pos;
while
(pos
<
num)
{
cin
>>
comps[pos].real
>>
comps[pos].imag;
cin
>>
comps[pos
+
1
].real
>>
comps[pos
+
1
].imag;
sum
+=
comps[pos].real
*
comps[pos
+
1
].real
+
comps[pos].imag
*
comps[pos
+
1
].imag;
pos
+=
2
;
}
cout
<<
"
sum is
"
<<
sum
<<
endl;
return
0
;
}
另外一種方法是,在main函數(shù)中申請(qǐng)空間,而不是在create函數(shù)中。
看下面的例子
bool
isDigit(
char
ch)
{
return
ch
>=
'
0
'
&&
ch
<=
'
9
'
;
}
int
maxContinueNum(
const
char
*
inputstr,
char
*
outputstr)
{
int
i,j;
int
maxlen
=
0
;
int
start;
i
=
0
;
while
(inputstr[i]
!=
'
\0
'
)
{
if
(isDigit(inputstr[i]))
{
j
=
i
+
1
;
while
(inputstr[j]
!=
'
\0
'
&&
isDigit(inputstr[j]))
j
++
;
if
(j
-
i
>
maxlen)
{
maxlen
=
j
-
i;
start
=
i;
}
i
=
j;
}
else
i
++
;
}
for
(i
=
0
;i
<
maxlen;i
++
)
outputstr[i]
=
inputstr[i
+
start];
outputstr[i]
=
'
\0
'
;
return
maxlen;
}
int
main()
{
char
input[]
=
{
"
abcd12345ed125ss123456789
"
}
;
char
*
output
=
new
char
[
100
];
cout
<<
maxContinueNum(input, output)
<<
endl;
cout
<<
output
<<
endl;
}
outputstr在main函數(shù)中申請(qǐng)內(nèi)存,在maxContinueNum函數(shù)中更改其中的值。
posted on 2011-05-04 23:43
baby-fly
閱讀(655)
評(píng)論(0)
編輯
收藏
引用
所屬分類(lèi):
Effective STL / C++
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
指針做參數(shù)
C++虛函數(shù)表解析(轉(zhuǎn))
More Effective C++ 不要對(duì)數(shù)組使用多態(tài)
Clause 19:相等equality 和等價(jià) equivalence
Clause 21:總是讓比較函數(shù)在等值情況下返回false
STL中仿函數(shù)(functors)、類(lèi)成員和mem_fun的使用
STL之仿函數(shù),適配器簡(jiǎn)介
STL lower_bound upper_bound equal_range
Clause 22 不要直接修改set或multiset中的鍵值
Clause 19 刪除元素的方法
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
Chat2DB
管理
Copyright @ baby-fly
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster
久久精品亚洲乱码伦伦中文
|
少妇久久久久久久久久
|
精品久久久久久久中文字幕
|
久久综合五月丁香久久激情
|
久久久久久亚洲精品影院
|
久久A级毛片免费观看
|
91久久成人免费
|
亚洲愉拍99热成人精品热久久
|
欧美熟妇另类久久久久久不卡
|
88久久精品无码一区二区毛片
|
午夜精品久久久久成人
|
久久久久久伊人高潮影院
|
91精品国产色综久久
|
久久精品国产日本波多野结衣
|
亚洲欧美日韩精品久久
|
天天躁日日躁狠狠久久
|
香蕉久久夜色精品国产尤物
|
97久久精品人妻人人搡人人玩
|
久久天天婷婷五月俺也去
|
久久国产精品国语对白
|
久久96国产精品久久久
|
久久精品天天中文字幕人妻
|
久久99精品久久久久久不卡
|
国产欧美久久久精品
|
99久久夜色精品国产网站
|
亚洲国产精品久久久久婷婷老年
|
久久久亚洲欧洲日产国码是AV
|
嫩草影院久久国产精品
|
国产精品久久久久国产A级
|
香蕉久久夜色精品升级完成
|
久久久一本精品99久久精品88
|
污污内射久久一区二区欧美日韩
|
免费国产99久久久香蕉
|
久久亚洲综合色一区二区三区
|
国产成人无码久久久精品一
|
久久99热只有频精品8
|
久久精品国产亚洲AV嫖农村妇女
|
久久亚洲精品中文字幕
|
青草国产精品久久久久久
|
久久精品国产99国产电影网
|
狠狠色丁香久久婷婷综
|