C概念及數(shù)組指針


一,運算符優(yōu)先級

  • 括號第一,單目第二,乘除第三,加減第四,位移第五,關(guān)系第六,等于不等于第七,位與異或位或八九十,邏輯或和與十二十一,條件高于賦值,逗號運算最低。

二,數(shù)組地址分析

  • 舉例:
    int arr[5] = {1};
    arr:0x0000
    &arr[0]:0x0000
    &arr:0x0000
    arr+1:0x0004
    &arr[0]+1:0x0004
    &arr+1:0x0014
  • 說明
    arr數(shù)組名
    &arr[0]:數(shù)組元素的首地址

三,數(shù)組定義及初始化

  • 數(shù)組需定義并初始化,不能先定義后初始化
int arr[5];
arr[4] = {1};      //未聲明,若賦值則arr[4] = 1;
arr[5] = {1,2,5};//數(shù)組越界并且未聲明
  • 數(shù)組初始化
    int arr[5] = {1};
    int arr[4] = {1,2,3,4};
    int arr[3] = {[1] = 2}; //不建議
    int buf[ ] = {1,2,3,4}; //不建議
    int buf[ ] = {}; //ERROR

四,指針表示形式及初始化

  • 表示形式
    int *p; int* p; //內(nèi)核代碼里見的多 int * p;
  • 指針初始化
int *p = NULL; //OK,NULL空地址,是一個宏
int a = 3;
int *p = &a; //OK
int a = 3;
int *p;
p = &a; //OK
int *p;
*p = &a; //ERROR

五,地址間接取值并對其運算

  • 間接運算
int *p = NULL;
printf("p = %p\n", p); //輸出 p = (nil)
printf("*p = %d", *p); //ERROR,空地址不能訪問里面的值
int *p = 10; //不能將常量直接賦值給指針
printf("p = %p\n", p); //輸出0xa
printf("*p = %d\n", *p); //內(nèi)存中并未分派0xa這塊內(nèi)存
int a = 3;
int *pa = &a;
int *pc = pa; //同類型指針可以直接轉(zhuǎn)換
char *pd = (char *)pa; //不強制轉(zhuǎn)換會有警告 

六,指針的類型和指針所指向的類型

  • 指針的類型:去掉變量名之后的部分
  • 指針所指向的類型:去掉變量名及其前面的*
  • 指針大小:64位機大小為8,32位機大小為4

七,數(shù)組和指針

1,數(shù)組元素訪問形式

int arr[5] = {1,2,3,4,5};
int *pa = arr;
arr[0];
*(arr);
*(pa);
pa[0];

2,野指針

  • 沒有初始化,或者其指向的內(nèi)存被釋放,而指針沒有被置空
    int *p; *p +=10; //直接使用會出錯
  • 危害:造成系統(tǒng)資源浪費,容易曹誠位置的知名錯誤

3,指針地址運算

  • 自增:指針向高地址方向移動
  • 自減:指針向低地址方向移動
  • 指針相減表示指針之間的距離,相加沒有意義
  • 指針加減一個常量,表示地址向高字節(jié)或低地址方向移動

4,概念區(qū)分
int buf[3]; //數(shù)組,其大小為3,存放三個int常量 int *pb; //指針,其類型為int *型 int *arr[3]; //指針數(shù)組 int (*pa)[3]; //數(shù)組指針,又稱行指針

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,607評論 3 44
  • 作業(yè)整理; 指針的基本的結(jié)構(gòu)與基礎(chǔ)知識整理; 作業(yè)講解:(1) 將2~100之間的素數(shù) 保存到數(shù)組中,并遍歷輸出,...
    比莉吉恩閱讀 431評論 0 0
  • 變量的聲明和定義變量聲明(declaration) 可以declaration很多次,不占內(nèi)存空間,例如 exte...
    FlyingReganMian閱讀 1,118評論 0 1
  • C語言指針的總結(jié) 1. 變量 不同類型的變量在內(nèi)存中占據(jù)不同的字節(jié)空間。 內(nèi)存中存儲數(shù)據(jù)的最小基本單位是字節(jié),每一...
    xx_cc閱讀 4,119評論 11 39
  • 我們分手吧。 深夜十二點,我收到張先生發(fā)來的微信。確切地說,并不是十二點,而是十一點二十九分。不得不說這真是個尷尬...
    殊言成木閱讀 1,070評論 13 5

友情鏈接更多精彩內(nèi)容