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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C和指针之学习笔记(3)

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

8章 數組

1.數組與指針

  數組名是一個指針常量,也就是數組第1個元素的地址

?

  int ?a[10]; ?int ?b[10]; ?int ?*c; ?

(1)?c = & a[0]; &a[0]表示一個指向數組第1個元素的指針。

(2)?c=a; c = & a[0]; 等價

(3)?b = a; 非法,不能使用賦值符把一個數組的所有元素復制到另一個數組,必須使用一個循環,每次復制一個元素。

(4)?a = c; 非法a是指針常量,而c是指針變量。

?

2.?下標引用和間接訪問完全相同。

array[subscript] ?<==> ?*(array + (subscript)) ??(完全等價)

?

??egint ?array[10]; ?

??????int ?*ap=array+2;

?

(1)ap <==> array + 2 ?<==> &array[2]

(2)*ap <==> array[2] ?<==> ?*(array+2)

(3)ap [0] <==> ?*(ap + (0)) ?<==> ?array[2]

(4)ap + 6 <==> ?array + 8 ?<==> &array[8]

(5)*ap + 6 <==> ?array[2]+6 ?

(6)*(ap + 6) <==> ?array[8]

(7)ap [6] <==> ?array[8]

(8)ap[-1] <==> ?array[1]

(9)2[array] <==> ?*(2+(array)) ?<==> ?*(array + 2)

?

3.?字符串常量的表示

(1)?char ?message1[ ] = “?hello “; ???// 初始化一個字符數組的元素

(2)?char ?*message2 = “?hello “; ????//真正字符串常量

???????指針常量message2 被初始化為指向這個字符串常量的存儲位置。

?

  • 4.?數組元素順序存儲
  • eg int ?array [3][6];

    數組:

      


    5. int ?matrix [3][10];
    ?

    ??matrix 這個名字的值是一個指向它第1個元素的指針,所以matrix是一個指向一個包含有10個整型元素的數組的指針。

    ?      ?

    (1)*(matrix +1) :指向整型的指針。子數組第1個元素地址。

    (2)*(matrix +1)+5 :第6個元素的地址。

    3*(*(matrix + 1) + 5 )?:<==> ?matrix [1][5]

    ?

    6.指向數組的指針

    int ?vector[10], ?*vp = vector; ?????//正確

    int ?matrix[3][10], ?*mp = matrix; ???//錯誤

    因為,matrix并不是一個指向整型的指針,而是一個指向整型數組的指針

    ?

    int ?(*p) [10]; ??//聲明一個指向整型數組的指針,p是指向整型數組的指針

    int ?(*p) [10] = matrix; ?//聲明+初始化

    ?

    指向matrix的第1個整型元素:

    (1)int ?*pi = &matrix [0][0];

    (2)int ?*pi = matrix[0];

    ?

    7.指針的兼容性

    (1)int ?*pt;

      ??int ?(*pa) [3];

    ? ? ? ? int ?ar1 [2] [3];

    ? ? ? ? int ?ar2 [3] [2];

    ? ? ? ? int ?**p2;

    ??? ??則:

    ?????????pt = & ar1 [0] [0] ; ?

    ?????????pt = ar1 [0] ;

    ?????????pt = ar1; ????// 非法pt指向一個int數值,而ar1指向由3int值構成的數組

    ? ? ? ? ?pa = ar1; ???//都指向int[3]

    ?   ?pa = ar2; ???//非法pa指向3int構成的數組,而ar2指向2int構成的數組

    ?   ?p2 = &pt; ??// 都指向int *

       ??*p2 = ar2 [0]; ??//*p2類型為指向int的指針,所以和ar2 [0]兼容

    ?   ??p2 = ar2; ??//非法p2是指針的指針,ar2是指向由2int值構成的數組的指針。

    ? ? ? ? ? ? ? ? ? ? ? ? ? ?因此,p2ar2類型不同

    ?

    (2)將常量非常量數據的地址賦給指向常量的指針是合法的。只有非常量數據的地址才可以賦給普通指針

    ?int ?*p1;

    ?const ?int ?*p2;

    ?const ?int ?**pp2;

    ?p1 = p2; ?????//非法,把const指針賦值給非const指針

    ?p2 = p1; ?????//合法,把非const指針賦值給const指針,前提是只進行一層間接運算

    ?pp2 = &p1; ??//非法,把非const指針賦值給const指針

    ?

    轉載于:https://www.cnblogs.com/clover-siyecao/p/5437937.html

    總結

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

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