啊我摔倒了..有沒有人扶我起來學習....
👱個人主頁: 《 C G o d 的 個 人 主 頁 》 \color{Darkorange}{《CGod的個人主頁》} 《CGod的個人主頁》交個朋友叭~
💒個人社區: 《 編 程 成 神 技 術 交 流 社 區 》 \color{Darkorange}{《編程成神技術交流社區》} 《編程成神技術交流社區》加入我們,一起高效學習,收割好Offer叭~
🌱刷題鏈接: 《 L e e t C o d e 》 \color{Darkorange}{《LeetCode》} 《LeetCode》快速成長的渠道哦~
#include#includeint rand = 10;//變量rand與庫函數rand()沖突了
int main()
{printf("%d\n", rand);
return 0;
}
namespace bobo
{// 命名空間中可以定義變量/函數/類型
int rand = 10;
int Add(int left, int right)
{return left + right;
}
struct Node
{struct Node* next;
int val;
};
}
namespace N1
{int a;
int b;
int Add(int left, int right)
{return left + right;
}
namespace N2
{int c;
int d;
int Sub(int left, int right)
{return left - right;
}
}
}
namespace bobo
{// 命名空間中可以定義變量/函數/類型
int a = 0;
int b = 1;
int Add(int left, int right)
{return left + right;
}
struct Node
{struct Node* next;
int val;
};
}
int main()
{// 編譯報錯:error C2065: “a”: 未聲明的標識符
printf("%d\n", a);
return 0;
}
結果:
int main()
{printf("%d\n", N::a);
return 0;
}
using N::b;
int main()
{printf("%d\n", N::a);
printf("%d\n", b);
return 0;
}
using namespce N;
int main()
{printf("%d\n", N::a);
printf("%d\n", b);
Add(10, 20);
return 0;
}
三、C++輸入&輸出#include// std是C++標準庫的命名空間名,C++將標準庫的定義實現都放到這個命名空間中
using namespace std;
int main()
{cout<< "Hello world!!!"<< endl;
return 0;
}
說明:
注意:
早期標準庫將所有功能在全局域中實現,聲明在.h后綴的頭文件中,使用時只需包含對應頭文件即可,后來將其實現在std命名空間下,為了和C頭文件區分,也為了正確使用命名空間,規定C++頭文件不帶.h;舊編譯器(vc 6.0)中還支
#includeusing namespace std;
int main()
{int a;
double b;
char c;
// 可以自動識別變量的類型
cin>>a;
cin>>b>>c;
cout<
#include#include
std::map
易寫錯。聰明的同學可能已經想到:可以通過typedef給類型取別名,比如:
#include#include
使用typedef給類型取別名確實可以簡化代碼,但是typedef有會遇到新的難題:
typedef char* pstring;
int main()
{const pstring p1; // 編譯成功還是失敗?
const pstring* p2; // 編譯成功還是失敗?
return 0;
}
在編程時,常常需要把表達式的值賦值給變量,這就要求在聲明變量的時候清楚地知道表達式的類型。然而有時候要做到這點并非那么容易,因此C++11給auto賦予了新的含義
4.2 auto簡介int TestAuto()
{return 10;
}
int main()
{int a = 10;
auto b = a;
auto c = 'a';
auto d = TestAuto();
auto e;
cout<< typeid(b).name()<< endl;
cout<< typeid(c).name()<< endl;
cout<< typeid(d).name()<< endl;
//auto e; 無法通過編譯,使用auto定義變量時必須對其進行初始化
return 0;
}
注意:
使用auto定義變量時必須對其進行初始化,在編譯階段編譯器需要根據初始化表達式來推導auto的實際類型。因此auto并非是一種“類型”的聲明,而是一個類型聲明時的“占位符”,編譯器在編譯期會將auto替換為變量實際的類型
int main()
{int x = 10;
auto a = &x;
auto* b = &x;
auto& c = x;
cout<< typeid(a).name()<< endl;
cout<< typeid(b).name()<< endl;
cout<< typeid(c).name()<< endl;
return 0;
}
輸出結果:
void TestAuto()
{auto a = 1, b = 2;
auto c = 3, d = 4.0; // 該行代碼會編譯失敗,因為c和d的初始化表達式類型不同
}
4.4 auto不能推導的場景// 此處代碼編譯失敗,auto不能作為形參類型,因為編譯器無法對a的實際類型進行推導
void TestAuto(auto a)
{}
void TestAuto()
{int a[] = {1,2,3};
auto b[] = {4,5,6};
}
void TestFor()
{int array[] = {1, 2, 3, 4, 5 };
for (int i = 0; i< sizeof(array) / sizeof(array[0]); ++i)
array[i] *= 2;
for (int* p = array; p< array + sizeof(array) / sizeof(array[0]); ++p)
cout<< *p<< endl;
}
對于一個有范圍的集合而言,由程序員來說明循環的范圍是多余的,有時候還會容易犯錯誤。因此C++11中引入了基于范圍的for循環。for循環后的括號由冒號“ :”分為兩部分:第一部分是范圍內用于迭代的變量,第二部分則表示被迭代的范圍
void TestFor()
{int array[] = {1, 2, 3, 4, 5 };
for (auto& e : array)
e *= 2;
for (auto e : array)
cout<< e<< " ";
return 0;
}
注意: 與普通循環類似,可以用continue來結束本次循環,也可以用break來跳出整個循環
5.2 范圍for的使用條件void TestFor(int array[])
{for (auto& e : array)
cout<< e<< endl;
}
六、指針空值nullptr(C++11)
6.1 C++98中的指針空值void TestPtr()
{int* p1 = NULL;
int* p2 = 0;
// ……
}
NULL實際是一個宏,在傳統的C頭文件(stddef.h)中,可以看到如下代碼:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看到,NULL可能被定義為字面常量0,或者被定義為無類型指針(void*)的常量。不論采取何種定義,在使用空值的指針時,都不可避免的會遇到一些麻煩,比如:
void f(int)
{cout<<"f(int)"<cout<<"f(int*)"<f(0);
f(NULL);
f((int*)NULL);
return 0;
}
注意:
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
本文題目:C++·入門|準備知識-創新互聯
本文路徑:http://m.kartarina.com/article22/ccijjc.html
成都網站建設公司_創新互聯,為您提供移動網站建設、網站收錄、域名注冊、軟件開發、ChatGPT、服務器托管
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯