程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C到C++的升級,到c升級

C到C++的升級,到c升級

編輯:C++入門知識

C到C++的升級,到c升級


 

  • const 在C中只是個“只讀變量”,並不是真正意義上的常量,通過指針能改變它,如下
  1. 1 #include<stdio.h>
    2 int main()
    3 {
    4 const int a=0;//聲明只讀變量a為0
    5 int* p=(int*)&a;//給個指針指向a的空間
    6 *p=100;//改變a的存儲空間的內容
    7 printf("a=%d",a);//a被更改為100
    8 return0;
    9 }

     


const在C++中是真正意義上的常量,無法通過指針來改變
  1.  1 #include<iostream>
     2 usingnamespace std;
     3 int main()
     4 {
     5 const int a=0;//聲明只讀變量a為0
     6 int* p=(int*)&a;//給個指針指向a的空間
     7 *p=100;
     8 cout<<a;
     9 return0;
    10 }

    1 constint a=10; 2 constint b=20; 3 int c[a+b];

     

    上面的代碼在C中會報錯“無法確定數組長度”,因為在C中const只是個只讀變量,本質上還是變量,有存儲空間,定義數組長度用變量當然會出錯了。 但在C++中卻可以編譯通過,因為C++對const做了加強,使得const是真正意義上的常量。    
    • const和#define的區別
    #define只是在編譯前(預處理)進行普通的文本替換,沒有作用域檢查!
    1.  1 #include<iostream>
       2 usingnamespace std;
       3 int f(){
       4 cout<<B<<endl;
       5 }
       6 int g(){
       7 #define N 3//只希望在這個函數中用N=3
       8 constint a=100;// 希望在這個函數中用 a=100
       9 }
      10 #define B 1
      11 int main()
      12 {
      13 cout<<N<<endl;
      14 f();
      15 return0;
      16 }

       


    這個代碼第4行會出錯“[Error] 'B' was not declared in this scope”,B沒有定義,說明#define編譯前進行簡單文本替換時,只替換#define 下面的所有,位於#define上面的則沒有替換。   const 則由編譯器處理,有作用域檢查和類型檢查
    1.  1 #include<iostream>
       2 usingnamespace std;
       3 int f(){
       4 constint a=100;//只希望a=100的作用域在f()中
       5 }
       6 }
       7 int main()
       8 {
       9 cout<<a<<endl;//出錯,沒有定義a,因為a作用域只在f()中
      10 return0;
      11 }

       


    #define可以用 #undef 限定作用域,不過有點麻煩:
    1. 1 int g(){
      2 #define
      3 int a=10;
      4 #undef
      5 }

       

     
    • C++對函數類型和參數的加強
      C++中三目運算可以返回變量(前提是a,b不能是常量!(a<b?1:5)=50;這個一看就是錯的),而C中則不行(三目運算符(a<b ?a :b)  先判斷問號左邊是否為真,若為真執行a,否則執行b)
  2. 如:
    1. 1 int main()
      2 {
      3 int a=1;
      4 int b=100;
      5 (a<b?a:b)=50;
      6 printf("%d %d",a,b);
      7 }

       

      但C中上述代碼會出錯,三目運算符不能返回變量。        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved