Impossible is nothing
愛過知情重醉過知酒濃 花開花謝終是空 緣份不停留像春風來又走 女人如花花似夢
公告
日歷
<
2025年5月
>
日
一
二
三
四
五
六
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
統計
隨筆 - 8
文章 - 91
評論 - 16
引用 - 0
導航
C++博客
首頁
發新隨筆
發新文章
聯系
聚合
管理
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(4)
給我留言
查看公開留言
查看私人留言
隨筆分類
(4)
STL/BOOST(4)
(rss)
隨筆檔案
(8)
2006年6月 (2)
2006年4月 (4)
2006年3月 (1)
2006年2月 (1)
文章分類
(77)
C++語言(57)
(rss)
GDI/GDI+(1)
(rss)
Windows/MFC(3)
(rss)
編譯器(4)
(rss)
軟件工程(11)
(rss)
圖像處理(1)
(rss)
文章檔案
(91)
2006年7月 (4)
2006年6月 (12)
2006年5月 (3)
2006年4月 (4)
2006年3月 (27)
2006年2月 (41)
相冊
文章用圖
搜索
最新評論
1.?re: STL學習筆記[未登錄]
很詳細,贊
--bneliao
2.?re: 深度探索c++的對象模型
筆記很詳細,贊
--bneliao
3.?re: 近日復習記錄
不錯嘛!
--秦歌
4.?re: 區域填充算法
頂頂頂頂頂頂頂頂
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
頂頂頂頂
頂頂頂頂
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
頂頂頂頂
--lishali
5.?re: Singleton模式的演化[未登錄]
評論內容較長,點擊標題查看
--galaxy
閱讀排行榜
1.?從輸入流中讀入一行(2264)
2.?sap的幾道筆試題目(轉)(1477)
3.?工作中發現的(1328)
4.?什么是調色板?(1005)
5.?Stay Hungry, Stay Foolish" (832)
6.?繼續貼面試題目(729)
7.?近日復習記錄(655)
8.?要讀的書(549)
評論排行榜
1.?工作中發現的(3)
2.?sap的幾道筆試題目(轉)(2)
3.?繼續貼面試題目(1)
4.?從輸入流中讀入一行(1)
5.?Stay Hungry, Stay Foolish" (1)
一個關于指針的問題
一個關于指針的問題
有些東西在你沒有遇到之前還真是不知道自己沒有弄清楚,也許是我平時細節的地方注意少了,看來以后要多加注意了。
char
*
pStr;
char
ch;
char
str[]
=
"
Hello
"
;
ch
=
str[
1
];
*
pStr
=
str[
1
];
printf(
"
ch = %c\n
"
, ch);
printf(
"
*pStr = %c
"
,
*
pStr);
此時打印ch值的時候能正確輸出,但是打印pStr[0]的時候就出問題了,跟蹤發現是pStr[0] = str[1];這句出現問題。
原 來,char *pStr; 只定義了一個4字節的指針變量,而這個變量里面的內容是將要指向一個char類型變量的,但是此時pStr只是個“野指針”,并沒有指向一個char類型 的內存單元,所以,當用*pStr來訪問這個元素時,系統根本不知道該訪問何處的空間,因此,在使用pStr前,必須讓它指向一個具體的空間。
由上面可以將相關語句改為
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);
也就是說,要先給指針一個地址值初始化它,然后才能用*訪問它指向的內容。
◎另外,
在子函數中使用malloc()/new()分配的內存空間不會因子函數的返回而消失
,函數只會清理調子函數里定義的變量的空間,如:
char
*
func()
{
char
*
p;
p
=
(
char
*
)malloc(
sizeof
(
char
));
return
p;
}
//
返回后,p所在空間被釋放,但是p所指空間還存在
所以,可以用p1=func();來獲得在func()中分配的空間。
此中方法可以用來解決“指針的指針”使用不方便的問題。步驟分2步:1、把傳入的指針的指針參數去掉;2、把函數的返回值賦給要改變的對象的指針:
void
GetMemory2(
char
**
p,
int
num)
{
*
p
=
(
char
*
)malloc(
sizeof
(
char
)
*
num);
}
void
Test2(
void
)
{
char
*
str
=
NULL;
GetMemory2(
&
str,
100
);
//
注意參數是 &str,而不是str
strcpy(str,
"
hello
"
);
cout
<<
str
<<
endl;
free(str);
}
/**/
//////
下面是用傳遞動態內存的方法實現
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);
}
因 為此時用malloc/new分配的內存空間是堆里面的,函數返回時不會回收;而如果在子函數中用char p[]="asdfgewq";則p是在棧中定義的(先分配p的空間,然后講字符串拷貝進去,跟char *p="asdfasdf"分配在全局靜態內存中不一樣),所以會被系統收回。
posted on 2006-03-08 23:16
笑笑生
閱讀(225)
評論(0)
編輯
收藏
引用
所屬分類:
C++語言
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
Effective C++
Essential C++讀書筆記
深度探索c++的對象模型
理解復雜聲明
一個模板巧妙技術,語法技巧
一個復雜的boost.lambda表達式的例子
C++ 編程思想學習筆記-命名控制
2005年華為招聘--C語言筆試試題
dynamic_cast詳解
vc++7.1轉移到vc++2005 需要的一些變動
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Copyright © 笑笑生
Powered by:
博客園
模板提供:
滬江博客
无码人妻久久一区二区三区蜜桃
|
伊人久久免费视频
|
无码八A片人妻少妇久久
|
成人久久免费网站
|
久久精品99久久香蕉国产色戒
|
一级a性色生活片久久无
|
亚洲日韩中文无码久久
|
久久成人影院精品777
|
无码任你躁久久久久久
|
久久水蜜桃亚洲av无码精品麻豆
|
久久九九青青国产精品
|
偷窥少妇久久久久久久久
|
国产精品久久久天天影视
|
亚洲欧美久久久久9999
|
精品午夜久久福利大片
|
免费精品久久天干天干
|
人人狠狠综合久久亚洲婷婷
|
国产精品久久久香蕉
|
久久精品成人国产午夜
|
亚洲AV日韩精品久久久久久
|
精品久久久久久无码免费
|
蜜臀av性久久久久蜜臀aⅴ
|
香蕉久久夜色精品国产2020
|
久久亚洲综合色一区二区三区
|
久久久高清免费视频
|
国产三级精品久久
|
久久国产精品99精品国产987
|
久久精品国产亚洲av麻豆图片
|
久久久久久亚洲精品不卡
|
91久久九九无码成人网站
|
久久久久人妻精品一区
|
日韩精品久久久肉伦网站
|
精品一区二区久久久久久久网站
|
久久人人爽人人爽人人片AV麻烦
|
国产综合成人久久大片91
|
91久久香蕉国产熟女线看
|
国内精品久久久久影院一蜜桃
|
久久久久国产精品嫩草影院
|
热久久视久久精品18
|
国产亚洲成人久久
|
久久免费香蕉视频
|