日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C指针原理(19)-C指针基础

發布時間:2025/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C指针原理(19)-C指针基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不用下標,直接引用多維數組名時,多維數組名代表一個指針變量,這個指針變量指向是最后一維長度的數組的指針,假設x是一個2*5的數組,定義為:

int x[2][5]

直接引用x,不使用任何下標,此時x代表指向一個包括5個元素的數組的指針,每次將x增加或減少1,都表示向前移動或向后移動5個元素。例如:

#include <stdio.h>int main(void){int x[2][5]={{1,2,3,4,5},{6,7,8,9,10}};int i,j;for (i=0;i<2;i++){for (j=0;j<5;j++){printf("%d ",*(*(x+i)+j));}}return 1;}

lx@dp:~ % cc test4.c -o mytest

lx@dp:~ % ./mytest

1 2 3 4 5 6 7 8 9 10

(x+i)表示向后移動i次,這表示以5個元素為單位移動,而(x+i)+j中的j則是以1個單位進行移動,即先向后移動i次,每次移動5個元素單位,再向后移動j次,每次移動1個元素單位。

const類型定義:指明變量或對象的值是不能被更新,引入目的是為了取代預編譯指令

常量必須被初始化***

cons的作用
(1)可以定義const常量 例如:
const int Max=100;
int Array[Max];
(2)便于進行類型檢查 例如:
void f(const int i) { …}
編譯器就會知道i是一個常量,不允許修改;
(3)可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。
還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
例如:
void f(const int i) { i=10;//error! }
(5) 為函數重載提供了一個參考。
class A
{

void f(int i) {…} file://一個函數
void f(int i) const {…} file://上一個函數的重載

};
(6) 可以節省空間,避免不必要的內存分配。
例如:
#define PI 3.14159 file://常量宏
const doulbe Pi=3.14159; file://此時并未將Pi放入ROM中

double i=Pi; file://此時為Pi分配內存,以后不再分配!
double I=PI; file://編譯期間進行宏替換,分配內存
double j=Pi; file://沒有內存分配
double J=PI; file://再進行宏替換,又一次分配內存!
const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內存中有若干個拷貝。
(7) 提高了效率。
編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。

使用const
(1)修飾一般常量,常數組,常對象
   修飾符const可以用在類型說明符前,也可以用在類型說明符后。 例如:
int const x=2;  或  const int x=2;

int const a[5]={1, 2, 3, 4, 5}; 或 const int a[5]={1, 2, 3, 4, 5};

class A;  const A a; 或 A const a;

(2)修飾指針
const int A; 或 int const A; //const修飾指向的對象,A可變,A指向的對象不可變
int const A;   //const修飾指針A, A不可變,A指向的對象可變
const int const A; //指針A和A指向的對象都不可變
(3)修飾引用
   const double & v; 該引用所引用的對象不能被更新
 (4)修飾函數的返回值:
const修飾符也可以修飾函數的返回值,是返回值不可被改變,格式如下:
const int Fun1();
const MyClass Fun2();
(5)修飾類的成員函數:
const修飾符也可以修飾類的成員函數,格式如下:
class ClassName
{
public:
   int Fun() const;
  …
};
這樣,在調用函數Fun時就不能修改類里面的數據
(6)在另一連接文件中引用const常量
extern const int i; //正確的引用
extern const int j=10; //錯誤!常量不可以被再次賦值

***放在類內部的常量有什么限制?

class A{private:const int c3 = 7; // errstatic int c4 = 7; // errstatic const float c5 = 7; // err......

};
初始化類內部的常量
1 初始化列表:
class A
{
public:
A(int i=0):test(i) {}
private:
const int i;
};
2 外部初始化,例如:
class A
{
public:
A() {}
private:
static const int i;
};
const int A::i=3;

總結

以上是生活随笔為你收集整理的C指针原理(19)-C指针基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。