編程小苑
C++博客
首頁
新文章
新隨筆
聚合
管理
posts - 19, comments - 21, trackbacks - 0
一個(gè)關(guān)于指針的問題
有些東西在你沒有遇到之前還真是不知道自己沒有弄清楚,也許是我平時(shí)細(xì)節(jié)的地方注意少了,看來以后要多加注意了。
char
*
pStr;
char
ch;
char
str[]
=
"
Hello
"
;
ch
=
str[
1
];
*
pStr
=
str[
1
];
printf(
"
ch = %c\n
"
, ch);
printf(
"
*pStr = %c
"
,
*
pStr);
此時(shí)打印ch值的時(shí)候能正確輸出,但是打印pStr[0]的時(shí)候就出問題了,跟蹤發(fā)現(xiàn)是pStr[0] = str[1];這句出現(xiàn)問題。
原來,char *pStr; 只定義了一個(gè)4字節(jié)的指針變量,而這個(gè)變量里面的內(nèi)容是將要指向一個(gè)char類型變量的,但是此時(shí)pStr只是個(gè)“野指針”,并沒有指向一個(gè)char類型的內(nèi)存單元,所以,當(dāng)用*pStr來訪問這個(gè)元素時(shí),系統(tǒng)根本不知道該訪問何處的空間,因此,在使用pStr前,必須讓它指向一個(gè)具體的空間。
由上面可以將相關(guān)語句改為
char
*
pStr;
char
ch;
char
str[]
=
"
Hello
"
;
pStr
=
&
ch;
//
pStr指向ch、獲得初始化
pStr
=
&
str[
1
];
//
pStr指向str[1]地址、獲得初始化
ch
=
str[
1
];
*
pStr
=
str[
1
];
printf(
"
ch = %c\n
"
, ch);
printf(
"
*pStr = %c
"
,
*
pStr);
也就是說,要先給指針一個(gè)地址值初始化它,然后才能用*訪問它指向的內(nèi)容。
◎另外,
在子函數(shù)中使用malloc()/new()分配的內(nèi)存空間不會(huì)因子函數(shù)的返回而消失
,函數(shù)只會(huì)清理調(diào)子函數(shù)里定義的變量的空間,如:
char
*
func()
{
char
*
p;
p
=
(
char
*
)malloc(
sizeof
(
char
));
return
p;
}
//
返回后,p所在空間被釋放,但是p所指空間還存在
所以,可以用p1=func();來獲得在func()中分配的空間。
此中方法可以用來解決“指針的指針”使用不方便的問題。步驟分2步:1、把傳入的指針的指針參數(shù)去掉;2、把函數(shù)的返回值賦給要改變的對(duì)象的指針:
void
GetMemory2(
char
**
p,
int
num)
{
*
p
=
(
char
*
)malloc(
sizeof
(
char
)
*
num);
}
void
Test2(
void
)
{
char
*
str
=
NULL;
GetMemory2(
&
str,
100
);
//
注意參數(shù)是 &str,而不是str
strcpy(str,
"
hello
"
);
cout
<<
str
<<
endl;
free(str);
}
/**/
//////
下面是用傳遞動(dòng)態(tài)內(nèi)存的方法實(shí)現(xiàn)
char
*
GetMemory3(
int
num)
{
char
*
p
=
(
char
*
)malloc(
sizeof
(
char
)
*
num);
return
p;
}
void
Test3(
void
)
{
char
*
str
=
NULL;
str
=
GetMemory3(
100
);
strcpy(str,
"
hello
"
);
cout
<<
str
<<
endl;
free(str);
}
因?yàn)榇藭r(shí)用malloc/new分配的內(nèi)存空間是堆里面的,函數(shù)返回時(shí)不會(huì)回收;而如果在子函數(shù)中用char p[]="asdfgewq";則p是在棧中定義的(先分配p的空間,然后講字符串拷貝進(jìn)去,跟char *p="asdfasdf"分配在全局靜態(tài)內(nèi)存中不一樣),所以會(huì)被系統(tǒng)收回。
posted on 2005-12-21 10:55
halCode
閱讀(581)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
算法/數(shù)據(jù)結(jié)構(gòu)
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
一個(gè)關(guān)于指針的問題
數(shù)組和指針的比較
C++里"const"關(guān)鍵字相關(guān)問題
原碼、反碼、補(bǔ)碼
終于弄清了幾個(gè)長(zhǎng)期模模糊糊的問題
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2005年12月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(7)
給我留言
查看公開留言
查看私人留言
隨筆分類
DirectShow
Qt編程(3)
VC/MFC(4)
算法/數(shù)據(jù)結(jié)構(gòu)(5)
心情(6)
隨筆檔案
2008年7月 (1)
2006年4月 (1)
2006年3月 (4)
2006年2月 (1)
2005年12月 (6)
2005年11月 (6)
文章分類
VC/MFC(4)
備看文檔(10)
驅(qū)動(dòng)(1)
算法/數(shù)據(jù)結(jié)構(gòu)(6)
心情(1)
文章檔案
2006年9月 (1)
2006年5月 (2)
2006年2月 (1)
2006年1月 (4)
2005年12月 (5)
2005年11月 (7)
相冊(cè)
程序相關(guān)
編程資源
http://dict.cnki.net/
infoxa的E書下載
很不錯(cuò)的書籍下載站,不用注冊(cè),書籍豐富
MSDN上DDK的教程
很難找到,所以保存起來
驅(qū)動(dòng)開發(fā)網(wǎng)
驅(qū)動(dòng)開發(fā)網(wǎng)
中國(guó)協(xié)議分析網(wǎng)
不務(wù)正業(yè)
IMG2TXT
IMG2TXT
MakePic
Make various funny Pics
我99伴奏
不錯(cuò),全,而且質(zhì)量還不錯(cuò)
找工作
經(jīng)典招聘面試筆試題目集錦
招聘筆試題目交流
搜索
最新評(píng)論
1.?re: 灰鴿子第二章:好馬配好鞍,服務(wù)端正確配置
安裝名改1.EXE 啟動(dòng)項(xiàng)那里也改1 不行就是不行!騙人的!
--LWJ
2.?re: NSIS常見問題集錦
怎樣屏蔽安裝時(shí)候用戶選擇路徑,我想自定義路徑不讓他選了,謝謝。
--zx
3.?大家一起學(xué)習(xí)
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--zinikl
4.?re: 原碼、反碼、補(bǔ)碼
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--sdgsdg
5.?re: 一個(gè)老工程師的話(轉(zhuǎn)載)
學(xué)習(xí)了
--小馬
閱讀排行榜
1.?原碼、反碼、補(bǔ)碼(7066)
2.?用socket編寫C/S結(jié)構(gòu)程序的流程圖(6365)
3.?關(guān)于qt支持中文、國(guó)際化 (5290)
4.?MoveWindow(2912)
5.?SetWindowPos(2737)
評(píng)論排行榜
1.?原碼、反碼、補(bǔ)碼(2)
2.?一個(gè)老工程師的話(轉(zhuǎn)載)(2)
3.?第一個(gè)Qt程序(1)
4.?對(duì)《Visual C++中為普通程序添加ODBC應(yīng)用》的學(xué)習(xí)和認(rèn)識(shí)(1)
5.?終于弄清了幾個(gè)長(zhǎng)期模模糊糊的問題(0)
Copyright ©2025 halCode Powered By
博客園
模板提供:
滬江博客
亚洲国产成人久久笫一页
|
国产真实乱对白精彩久久
|
99久久国产综合精品网成人影院
|
麻豆av久久av盛宴av
|
久久国产精品偷99
|
99久久超碰中文字幕伊人
|
人妻少妇久久中文字幕
|
亚洲人成网亚洲欧洲无码久久
|
久久久久久国产精品无码超碰
|
久久久久综合网久久
|
久久久久国色AV免费观看
|
国产2021久久精品
|
成人久久免费网站
|
亚洲国产精品久久电影欧美
|
亚洲精品白浆高清久久久久久
|
久久久精品国产Sm最大网站
|
99久久精品免费
|
亚洲综合久久夜AV
|
熟妇人妻久久中文字幕
|
69久久夜色精品国产69
|
久久人人爽人爽人人爽av
|
三上悠亚久久精品
|
伊人久久综在合线亚洲2019
|
国产激情久久久久影院老熟女免费
|
精品综合久久久久久888蜜芽
|
色综合久久天天综合
|
久久无码精品一区二区三区
|
久久亚洲国产精品成人AV秋霞
|
国产人久久人人人人爽
|
久久久精品人妻无码专区不卡
|
久久精品水蜜桃av综合天堂
|
亚洲国产成人久久精品动漫
|
久久精品综合网
|
精品国产乱码久久久久久浪潮
|
久久国内免费视频
|
久久九九亚洲精品
|
久久WWW免费人成一看片
|
伊人久久大香线蕉无码麻豆
|
久久婷婷五月综合色奶水99啪
|
99久久无码一区人妻
|
久久99亚洲网美利坚合众国
|