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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言笔记之数组和指针(初学者)

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言笔记之数组和指针(初学者) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組

定義

由數據類型相同的一系列元素組成

size_t arr[index]={ }

*當{}內列出元素的值,可以讓編譯器自己數出數組大小,此時index可省略不寫。數組的長度可以用(sizeof arr)/(sizeof arr[0])間接得出

初始化

不完全初始化時,編譯器會把剩余的未初始化的數組初始化為0.

C99中在大括號內對指定元素賦值可用{[index] = data}的形式表示

未初始化的數組不要隨意使用,內部數據是隨機值。

不能使用變量定義數組(新手極易犯此種錯誤)
ps:C99引入了“變長數組”,可以用變量定義數組,但是聲明時不允許初始化。

用const聲明數組

只讀數組用const聲明,只能檢索不能修改,程序穩定性更高。

數組溢出

對于定義的type arr[index],實際的下標邊界是從0~index-1

多維數組

size_t arr[index1] [index2]={ }

*二維數組的定義和賦值形式如上,不能缺省二維的長度說明

二維數組的遍歷需要雙重循環

用途:char類型的一維數組存放字符串:char a[ ]={‘t’,‘e’,‘x’,‘t’,’\0’}等價于char a[ ]=“text”;,二維數組能夠存放多個字符串,且采用初值表進行初始化時‘\0’必須給出。此時arr[i] [j]表示引用某個字符,而arr[i]表示引用某個字符串

字符串數組

char s[]={‘h’,‘o’,‘y’,’\0’}或者char s[]={“hoy”} 輸出時printf()內用%s的格式
(內部的原理是從首地址逐個取出,直到遇到‘\0’為止

如果輸出遇不到\0:按照定義變量時的存儲規則(定義的先后存儲時地址從大到小也是從下到上),會打印出相鄰地址的字符。注意:‘\0’對應的ASCII值是‘0’,若數組后位為0也不會錯誤。

數組傳參

將數組傳入目標函數,傳入的是首個元素的地址,無法在內部用sizeof(arr)/sizeof(0)得到數組長度,所以必須要在外部算出數組長度再把長度一起傳入。/將數組傳入函數時,要單獨傳入數組的大小/

一定記住!傳入的是地址 地址 !不是整個數組的值!必須同時傳入長度 長度 長度!
長度要在主函數內算出來k

深入理解數組

在C中數組名表示第0個元素的地址,即對于定義的a[index]數組,a等價于&a[0],實質是一個地址常量,其值不能更改,做比較也無意義。

  • 存儲:連續存放
  • 數組名:首元素的地址。 *arr——讀取首元素的值

例外!:sizeof()內部單獨放一個數組名,計算的是整個數組占的字節大小。&數組名,取出的是整個數組的地址,雖然和首元素地址相同但是跨度是整個數組!


指針

定義

存放變量的地址。一定要指向一個變量

int *p = &x;

同一個變量可以有多個指針指向它,但一個指針不能同時指向多個變量,指針的指向可以修改

空指針:給指針賦一個NULL值 int *p = NULL; p的地址為0x0

檢查空指針:

  • if(p) //如果非空(可訪問)則執行
  • if(!p) //如果為空(不可訪問)則執行
  • *多級指針:int *pp 存放*p的地址

    *解引用操作符:通過地址找到對象。對pp的解引用找到的是p, 而*p就訪問到x

    指針的運算

  • 指針的遞增遞減:p++ (p–)用指針代替數組,因其自增自減的性質,從而便于順序訪問內存中的每一個元素。注意區分*p++——(++的對象是指針)§++——(p所指對象++)

    數組名稱不能做加減運算操作,只有指針才可以;指針的加減按照單元(根據類型分配字節數)。

  • 指針的比較:地址的比較,可以用作遍歷數組的循環條件等。

  • 應用場景

    1、函數需要返回多個值,即需要保存多個變量的改變量

    2、函數返回運算狀態,結果由指針返回

    傳入數組就是傳入指針,指針可以當作數組使用,只要傳入大小. *數組是const的指針,即int b [ ] ;等價于int * const b ;

    const int p=&i; 表示不能通過p去修改i,但變量仍可被賦值,p也可以指向其他的變量。

    在函數中改變數組的元素,main中的數組元素的值也改變。

    3、用指針來存放字符串,字符串存儲在常量區,無法對**p[0]**進行修改,

    數組保存的字符串以變量形式存儲在棧中

    需要使用時即調用,效率高,開辟的存儲空間少。

    常用重定義:typedef char * string;

    指針數組

    實質是數組,存放指針。

    int* arr[3] = {&a,&b,&c};


    深入理解指針的存儲

    指針本身需要計算機用內存存儲。

    無論什么類型的指針,占據的內存區大小是相同的

    這就是為什么sizeof一個數組時(數組跟指針有互通之處)得出的值恒為8或4了。


    函數指針

    void ( funcP) ();* 定義

    funcP = function; 指向函數,不要寫成function()

    (*funcP)(); 等價于 funcP(); 等價于 function(); 使用

    總結

    以上是生活随笔為你收集整理的c语言笔记之数组和指针(初学者)的全部內容,希望文章能夠幫你解決所遇到的問題。

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