1-p是指標,是位址;
int
*p;
2-程式設計習慣,空格位置
int
*p;//這裡強調*p是乙個int型別的變數,c程式設計師經常使用這種形式
int* p;
//這裡強調int*是乙個型別,用來定義指向int的指標
int* p1,p2;
//這樣建立的是乙個指標,乙個int型變數;因為乙個指標需要乙個*
3-c語言中可以使用malloc分配記憶體,c++中可以還可以使用new來分配記憶體
int
*pn =
newint
;//返回所配記憶體的首位址
4-只能用delete釋放由new分配的記憶體
如何使用呼叫動態陣列中的元素?
//使用new來建立動態陣列
int*p=
newint[10
];//返回所配記憶體的首位址
delete
p;//釋放記憶體
int
*pn =
newint[10
];pn[0]
=3; pn[1]
=4; pn[2]
=5; cout << pn[0]
<<
" "<< pn[1]
<< endl;
pn=pn+1;
//指標指向第二個位址
cout << pn[0]
<<
" "<< pn[1]
<< endl;
/*輸出結果:
3 44 5
5-指標和字串
注意:cout語句中 f 是代表字元「r"的位址,cout會從字元 r 開始輸出字串,一直遇到 '/0』為止;
此外,對於陣列中的字串、指標代表的字串、雙引號代表的字串常量,cout都是用來傳遞其位址,而不是傳遞字串,
char f[10]
="rose"
; cout << f <<
" is red"
;/**輸出結果
rose is red /
6-顯示字串的位址
為什麼用(int )animal顯示字串位址,而不是用(char )animal來顯示字串的位址?
答:要顯示字串的位址,則必須將這種指標(char型別)轉化成另一種指標型別,如int 或者double
char animal[20]
="bear"
;//陣列儲存字串
const
char
*bird =
"wren"
;//指標儲存字串
char
*ps;
cout << animal <<
" and "
; cout << bird << endl;
cout <<
"enter an kind of animal"
; cin >> animal;
//輸入fox
ps=animal;
cout<" at "
<<
(int
*)animal/用來顯示字串的位址
cout<" at "
<<
(int
*)ps<
//使用new建立動態結構
struct inflatable ;
inflatable *p =
new inflatable;
//使用new建立動態結構
cout <<
"enter name of inflatable item"
<< endl;
cin.
get(p-
>name,20)
;//第一種輸入方法
cout <<
"enter a volume"
<< endl;
cin >>
(*p)
.volume;
//第二種輸入方法
cout <<
"enter the price"
<< endl;
cin >> p-
>price;
cout <<
"name: "
<< p-
>name <<
" volume: "
<< p-
>volume <<
" price: "
<>price<< endl;
/* 輸出結果
enter name of inflatable item
kevin
enter a volume
100enter the price
400name: kevin volume: 100 price: 400
*/
8-new和delete的乙個小例子
//使用new和delete管理記憶體(管理字串)
/如果要輸入100個字串,其中最長的字串為79個字元,
而大多數字串短的多,
**方法一:**如果要用char陣列來儲存這些字串,
需要100個陣列,其中每個陣列的長度為80個字元。這樣其實有很多記憶體沒有被使用
**方法二:**建立乙個陣列,它包含100個指向char的指標,然後使用new 根據每個字串的需要分配相應的記憶體
//建立函式
char
*getname()
{char name[80]
;char
*p; cout <<
"enter your name: "
<< endl;
cin >> name;
p =newchar
[strlen
(name)+1
];//p = name;//這是錯誤的,因為這樣只是修改了儲存在p中的位址
strcpy
(p,name)
;//在visual stdio 2013**現錯誤,還沒有解決
return p;
注意:為什麼要使用new來建立乙個指標,為什麼不直接返回name 位址呢?
答:因為name為「自動儲存」,只有在函式getname()活動時存在,當在main()函式中便將name的記憶體釋放了;
9-儲存
1-自動儲存
2-靜態儲存
靜態儲存:1-在函式外面定義;2-在宣告變數時,使用關鍵字static;
3-動態儲存
使用new和delete來管理記憶體,成為自由儲存空間或者堆(heap)
C primer plus系列5 共用體
與結構體的區別,只能同時儲存其中一種型別 union one pail pail.int val 15 cout pail.int val endl pail.long val 16 將會被覆蓋,因為共用體同時只能儲存其中一中型別 cout pail.int val endl cout pail.l...
C primer plus 系列2 字串
1 將字串存在陣列中的兩種方法 2 如何在陣列中使用字串 3 cin只能讀取乙個單詞,讀到換行符認為字串結束 4 介紹cin.get cin.getline 1 將字串存在陣列中的兩種方法 int a 5 0 用來標記字串結尾 int a 5 food 稱為字串常量 2 在陣列中使用字串 inclu...
c primer plus 第十三章課後程式設計7題
a 交替列印倆個檔案的每一行 include include int main int argc,const char ar if fc fopen ar 2 r null 如果第乙個檔案遇到換行符則列印第二個檔案內容,反之一樣 a 交替列印倆個檔案的每一行。利用檔案指標的特性自動遞增的特點 do ...