字串常量的宣告方式:(儲存在常量儲存區,不可被修改)
char *p="i love you";
字串變數的宣告方式:(通常放在棧中,可被修改)
char p="i love you";
#include using namespace std;
int main()
輸出:長時間等待後無輸出,單步除錯提公升如下
輸出:
1.使用string定義字串,傳入函式
2.使用char*定義的字串,傳入函式
1,string傳入的字串:相當於string cp=p;
此時p的是乙個類物件,函式對該物件進行拷貝,形成乙個新的字串cp,而對cp的修改不會影響p。
2,char* 傳入的字串:相當於char *cp=p;
char cp傳入的字串與上面相同:char cp=p;
此時的p是字串的首位址,對cp和p指向同乙個儲存區域,通過cp對儲存區域的修改會影響p指向的字串。
1,p為區域性陣列,函式呼叫完成後立即銷毀,導致返回的指標找不到物件。
2,*p指向的字串常量在靜態儲存區,函式呼叫完成後不會立即銷毀,所以返回的指標可以找到物件。
c/c++堆、棧及靜態資料區詳解
static全域性變數與普通的全域性變數
static int a; 定義的變數a=0,只在當前cpp中可以使用,修改後不影響其他地方,其他地方呼叫的值預設為0;
->當前cpp檔案中全域性共享
extern int a; 宣告變數a;修改後影響其他地方的值,可以多處宣告,但是只能在一處定義
->所有cpp檔案中全域性共享
int a;定義的變數a=0,只在當前cpp中可以使用,其他地方無法呼叫
,其他地方只能用extern宣告後才能呼叫
#ifndef main
#define main
static int t; //定義t 標頭檔案中使用該方式不安全(假全域性變數)
extern int p; //宣告p
void ou2(); //相當於extern void ou2();
static void ou3();
class a
;#endif
#include #include "main.h"
#include using namespace std;
int p = 0; //定義p=0
int a::b = 0; //定義b=0
int q; //定義b=0
指標與陣列知識點總結
本文基於flying music部落格,加入自己的一些理解,請周知 1.印子 指標為什麼需要返回型別 我們用c語言寫了這樣的語句 cpp view plain copy inta a 3 編譯器為了完成這兩句 首先在編譯過程中要建立乙個符號表,樣子大概如下圖 然後在執行過程中,編譯器發現a 3這句 ...
C語言 總結陣列指標相關知識點
1 陣列在記憶體中是連續存放的。2 記憶體中的乙個記憶體單元對應乙個位址。3 在32位平台上指標是4個位元組,64位平台8個位元組。4 陣列的陣列名其實是陣列首元素的位址。1 sizeof 陣列名 這裡陣列名表示整個陣列。2 陣列名,這裡陣列名表示整個陣列。例子 32位 includeint mai...
指標知識點總結
用指標作函式引數。返回指標值的指標函式。指標陣列 指向指標的指標。main函式的命令列引數。指標與指標變數的概念 指標與位址運算子。變數 陣列 字串 函式 結構體的指標,以及指向變數 陣列 字串 函式 結構體的指標變數,通過指標引用以上各型別資料。指標與指標變數的概念。1 指標 就是記憶體中的乙個儲...