C Primer 筆記之 變數和函式

2021-06-29 02:23:58 字數 3060 閱讀 3343

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關鍵字宣告變數名而不是定義它。不定義變數的宣告包括物件名 物件型別和物件型別前的...