32位機器上:
cout《輸出:
4 4 8
8 4也就是說只有long long 以及double是占用8個位元組的。
(1)引用和指標一樣,是繫結對物件的另外乙個名字,改變它或者它繫結的物件,都會使雙方改變
(2)必須是乙個物件的別名, int &b=1;是錯的
(3)若繫結的物件時const型別,那麼引用也必須是const型別 如: const int a=1; (必須初始化),const int &b=a;
引用和複製建構函式的關係:
#include "stdafx.h"
#include#includeusing namespace std;
#include using namespace std;
class a
//字元陣列
char s="abc"//不定長陣列
char *s="abc"//指向常量字串的指標//在前兩種情況中都可以用s[1]='a';來修改陣列的值。
//但是在第三種情況中不能修改指標指向常量//的值.如:s[1]是錯誤的
//但是可以修改指標的指向如:s="cde";
幾種形參形式
char *s //如果傳進來的是陣列的話 是可以用s[1]來修改的
char s[10]
const char *s
char (&s([10]
const char (&s)[10]
這幾種情況就不要分析了
enum a; 那麼a,b,c的值為012 後面每乙個變數比前面的要加上1
在原來的標頭檔案中使用這樣的語句來防止多次編譯的
#ifndef file_h
#define file_h
#endif
但是也可以用
#pragma once
兩種最重要的標準庫型別是string 和vector
int _tmain(int argc, _tchar* argv)
;int *p=&a[2];
cout<<*p《輸出:
同樣可以訪問字串陣列char,就跟前面講到的一樣
const 修飾指標,則無法改變所指向物件的值。
但是可以更改指向
(1)指向const物件的指標
const int *p=0;
*p=1;//error不允許修改指標指向物件的值
p=&a;
(2)const指標
表示指標是const型別,不允許修改指標的指向,但是可以修改指標指向物件的值。
int *const p=0;
*p=1;
p=&a;//error
注意這種定義型別,必須是 int *const p 說明是int的指標
(3)指向const物件的const指標
const int *const p=0;
*p=1;//error
p=&a;//error
(4)指標和typedef
string s;
typedef string *pstring;
pstring const p1=&s;
const pstring p2=&s;
string *const p3=&s;
這幾個指標都是const指標。
產生const難以理解的原因是因為const既可以放在型別前面又可以放在型別後面(記住是型別)也就是說
int const 和const int是一樣的,但是
int *const是無法交換的 因為那是*const,好的 明白了。
記住不要忘記字串結束符null,盡可能的使用string,而要少使用char*
#include
strlen(s)
strcmp(s1,s2)
strcat(s1,s2)
strcpy(s1,s2)
strncat(s1,s2,n)將s2的前n個字元連線到s1的後面
strncpy(s1,s2,n)
(1)
char a=;
cout《輸出:2
(2)char a=;
cout<
輸出:15
出現了問題
(3)但是
char *p="afsfds";
cout《這樣子做是沒有問題的,輸出6
不過這種指標相當於是const 物件的指標
const int size=5;
int ar[size];//ok
int size_a=1;
int ar[size_a];//error 不是動態分配
int *p=new int[size_a];
delete p;//加上才釋放掉整個陣列的空間
有時候需要動態確定陣列的長度,而不僅僅是用const int 來定義陣列的長,這個時候就需要用到動態分配陣列
在c中用malloc()和free()
在c++中,用new 和delete
string s("aaa");
char *p=s.c_str();
意思為轉換回c風格字串的表示方法
使用陣列來初始化vector物件
int a[2][4]=,};
int (*p)[4]=&a[1]; //p為指向具有4個int陣列的 指標
cout<<*p[0]《輸出:
注意必須為int (*p)[4] 必須有()
1、區域性靜態物件
#include "stdafx.h"
#include #include using namespace std;
size_t count_calls()
int main()
11、
C primer閱讀之變數與指標
第二章 變數和基本型別 1.顯式訪問全域性變數,用操作符 2.引用和指標是復合型別。3.引用必須初始化 一旦引用被初始化為乙個物件,就不能被指向到另乙個物件。指標可以在任何時候指向到另乙個物件 引用必須在建立時被初始化。指標可以在任何時間被初始化。引用不是物件,所以不能定義引用的引用。4.void ...
c primer之變數與基本型別
如果表示式裡既有帶符號型別又有無符號型別,當帶符號型別取值為負時會出現異常結果。因為帶符號數會自動轉換成無符號數。unsigned u 10 int i 42 std cout endl 輸出 84 std cout endl 如果int佔32位,輸出4294967264引用與指標 引用並非物件,引...
C Primer讀書筆記之變數的定義與宣告
變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且有乙個定義。宣告用於向程式表明變數的型別和名字,不分配儲存空間。定義也是宣告 當定義變數時我們宣告了它的型別和名字。可以通過使用extern關鍵字宣告變數名而不是定義它。不定義變數的宣告包括物件名 物件型別和物件型別前的...