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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

發布時間:2024/9/27 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 打印數組中的每個元素,打印每個元素的地址:

  • #include <stdio.h>

    #include <stdlib.h>

    ?

    void main(void)

    {

    ??? int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    ??? for (int *p = a; p < a + 10;p++)? //指針類型決定4個字節

    ??? {

    ??????? printf("\n%p,%d", p, *p);

    ??? }

    ??? getchar();

    }

  • 指針數組

  • #include <stdio.h>

    #include <stdlib.h>

    ?

    void main(void)

    {

    ??? //輪詢數組的時候,可以用指針輪詢

    ??? //通過指針數組,可以管理地址

    ??? char *str[5] = { "calc", "notepad", "tasklist", "pause", "mspaint" };

    ??? for (char **pp = str; pp < str + 5;pp++)

    ??? {

    ??????? system(*pp);

    ??? }

    ??? getchar();

    }

  • 數組指針(等價于二維數組)

  • #include<stdio.h>

    #include<stdlib.h>

    int main(int argc, char *argv[])

    {

    ??? //二維數組,等價于二級指針

    ??? char str[5][10] = { "calc", "notepad", "tasklist", "pause", "mspaint" };

    ??? printf("%p",str);

    ??? for (char(*p)[10] = str; p < str + 5;p++)

    ??? {

    ??????? //打印地址?? 字符串

    ??????? printf("\n%p,%s",p,p);

    ??????? system((char *)p);

    ??? }

    ??? return 0;

    }

  • 二維數組

  • #include<stdio.h>

    #include<stdlib.h>

    int main(int argc,char *argv[])

    {

    ??? char str[5][10] = { "calc", "notepad", "tasklist", "pause", "mspaint" };

    ??? //指針地址一樣,但是類型不一樣

    ??? //str代表行地址,&str代表整個數組的地址,*str就是第一個字符的地址

    ??? printf("%p,%p,%p",str,&str,*str);

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 二維數組的開辟方式已經打印:

  • #include<stdio.h>

    #include<stdlib.h>

    ?

    int main(int argc,char *argv[])

    {

    ??? //開辟二維數組的空間

    ??? int **p;

    ??? p = (int **)malloc(sizeof(int)* 10);

    ??? int i,j;

    ??? for (i = 0; i < 10;i++)

    ??? {

    ??????? p[i] = (int *)malloc(sizeof(int)* 10);

    ??? }

    ??? //初始化數組

    ??? for (i = 0; i < 10; i++)

    ??? {

    ??????? for (j = 0; j < 10; j++)

    ??????? {

    ??????????? *(*(p + i) + j) = i * j;

    ??????? }

    ??????? putchar(10);

    ??? }

    ?

    ??? //通過指針的方式打印出二維數組

    ??? for (i = 0; i < 10;i++)

    ??? {

    ??????? for (j = 0; j < 10;j++)

    ??????? {

    ??????????? printf("%d ", *(*(p + i) + j));

    ??????? }

    ??????? putchar(10);

    ??? }

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 指針的加減法:

  • #include <stdio.h>

    #include<stdlib.h>

    ?

    int main(int argc,char *argv[])

    {

    ??? //c語言運算規則,加法原則實際加上的是:元素的大小*加上的數

    ??? //減法原則實際上減去的是:元素的大小*減去的數??????????????

    ??? int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

    ??? printf("%p\n",a);

    ??? int *p1 = &a[0][0];

    ??? int *p2 = p1 + 4;

    ??? printf("%d\n",*p2);

    ??? int *p3 = p2 - 3;

    ??? printf("\n%d", *p3);

    ??? printf("\n%d", p2 - p3);

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 二維數組的打印問題

  • #include <stdio.h>

    #include<stdlib.h>

    ?

    int main(int argc,char *argv[])

    {

    ??? //c語言運算規則,加法原則實際加上的是:元素的大小*加上的數

    ??? //減法原則實際上減去的是:元素的大小*減去的數??????????????

    ??? int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

    ??? //將數組中的每個元素一個個打印出來

    ??? for (int *p = &a[0][0]; p < &a[0][0] + 12; p++)

    ??? {

    ??????? //下面的一句實現的是每過4個元素換行一下

    ??????? if ((p - &a[0][0]) % 4 == 0)

    ??????? {

    ??????????? printf("\n");

    ??????? }

    ??????? printf("%5d",*p);

    ??? }

    ??? printf("\n\n\n");

    ??? //a是一個常量的行指針,a的類型與px等價

    ??? int(*px)[4] = a;

    ??? for (int i = 0; i < 3; i++)

    ??? {

    ??????? for (int j = 0; j < 4;j++)

    ??????? {

    ??????????? //printf("%5d",a[i][j]);???? //通過數組名的方式實現打印

    ??????????? //printf("%5d",px[i][j]);??? //通過指針下標的方式實現

    ??????????? //printf("%5d",*(px[i]+ j));//通過指針的方式實現

    ??????????? printf("%5d",*(*(px+i)+j));? //通過下標的方式實現

    ??????? }

    ??????? printf("\n");

    ??? }

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 結構體數組

  • #include<stdio.h>

    #include<stdlib.h>

    #include<Windows.h>

    ?

    struct pos{

    ??? int x;

    ??? int y;

    };

    ?

    struct pos pos2[8] = {

    ??? { 100, 200 },

    ??? { 100, 0 },

    ??? { 200,400 },

    ??? { 300,600 },

    ??? { 390,600 },

    ??? { 190,900 },

    ??? { 990,100},

    ??? {1390,600}

    };

    ?

    struct pos pos1[8][2] = {

    ??? { { 200, 0 }, { 900, 800 } },

    ??? { { 0, 0 }, { 800, 1300 } },

    ??? { { 1500, 200 }, { 600, 900 } },

    ??? { { 800, 700 }, { 700, 800 } },

    ??? { { 300, 100 }, { 600, 700 } },

    ??? { { 900, 800 }, { 700, 700 } },

    ??? { { 100, 200 }, { 800, 800 } }

    };

    ?

    void main()

    {

    ??? HWND *win = FindWindowA("Notepad++", "Notepad++");

    ??? if (win == NULL)

    ??? {

    ??????? return;

    ??? }

    ??? SetWindowPos(win, NULL, 0, 0, 100, 300, 1);

    ?

    ??? for (int i = 0; i < 8; i++)

    ??? {

    ??????? //設置窗口位置大小

    ??????? SetWindowPos(win, NULL, pos1[i][0].x, pos1[i][0].y, pos1[i][1].x, pos1[i][1].y, 1);

    ??????? Sleep(3000);

    ??? }

    ??? system("pause");

    }

  • 作為通過函數改變二維數組中各各參數的值,和打印相關的知識點

  • #include <stdio.h>

    #include <stdlib.h>

    /************************************************************************/

    /* 一維數組沒有副本機制,二維數組也沒有,數組作為參數都是傳遞地址?????? */

    /************************************************************************/

    int searchmax(int a[3][4])

    {

    ??? //通過數組傳遞過來的數組,求大小的時候都是432位系統情況)

    ??? printf("\nsearch = %d",sizeof(a));

    ??? int b[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 };

    ??? printf("\nsearch b = %d",sizeof(b));

    ???

    ??? //下面開始求數組的最大值

    ??? int max;?? //存儲最大的值

    ??? max = a[0][0];

    ??? for (int i = 0; i < 3;i++)

    ??? {

    ??????? for (int j = 0; j < 4;j++)

    ??????? {

    ??????????? if (a[i][j] > max)?? //比較大小

    ??????????? {

    ??????????????? //接收最大的地址

    ??????????????? max = a[i][j];

    ??????????? }

    ??????? }

    ??? }

    ??? return max;

    }

    ?

    int main(int argc, char *argv[])

    {

    ??? int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 };

    ??? int max = searchmax(a);

    ?

    ??? printf("\n二維數組的最大值為:%d\n",max);

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 求二維數組中元素的最小值

  • #include <stdio.h>

    #include<stdlib.h>

    int searchmin(int(*p)[4])

    {

    ??? //假設第一個是最小的

    ??? //int min = p[0][0];

    ??? //同樣可以使用下面的方式實現

    ??? int min = *(*(p + 0) + 0);

    ?

    ??? for (int i = 0; i < 3;i++)

    ??? {

    ??????? for (int j = 0; j < 4;j++)

    ??????? {

    ??????????? //第一種方式通過數組下標的方式實現

    ??????????? //if (p[i][j] <min)? //比較大小

    ??????????? //{

    ??????????? //? min = p[i][j];?//求出最小的數

    ??????????? //}

    ?

    ??????????? if (*(*(p +i) + j) < min)

    ??????????? {

    ??????????????? min = *(*(p + i) + j);

    ??????????? }

    ??????? }

    ??? }

    ??? return min;

    }

    ?

    int main(int argc,char *argv[])

    {

    ??? int a[3][4] = { 1, 2, 3, 4, 5, 16, -7, 8, 9, 10, 1, 2 };

    ?

    ??? printf("\nmin = %d\n",searchmin(a));

    ?

    ??? system("pause");

    ??? return 0;

    }

  • 通過指針的方式實現求二維數組中的最大值

  • #include <stdio.h>

    #include<stdlib.h>

    ?

    /************************************************************************/

    /* 二維數組退化為一個指向有4個元素的數組的指針?????????????????????????*/

    /************************************************************************/

    static int searchmax(int(*p)[4])

    {

    ??? //存儲最大值

    ??? int max = p[0][0];

    ??? for (int i = 0; i < 3; i++)

    ??? {

    ??????? for (int j = 0; j < 4;j++)

    ??????? {

    ??????????? if (p[i][j] > max)

    ??????????? {

    ??????????????? max = p[i][j];

    ??????????? }

    ??? ??? }

    ??? }

    ??? return max;

    }

    ?

    int main(int argc,char *argv[])

    {

    ??? int a[3][4] = { 1, 2, 3, 4, 5, 16, -7, 8, 9, 10, 1, 2 };

    ?

    ??? printf("\nmin = %d\n",searchmax(a));

    ?

    ??? system("pause");

    ??? return 0;

    }

    12.三維數組定義,并通過數組的方式打印出來

    #include <stdio.h>

    #include<stdlib.h>

    ?

    void printArray(int a[3][4][5])

    {

    ??? int i,j,k;

    ??? for (i = 0; i < 3;i++)

    ??? {

    ??????? for (j = 0; j < 4;j++)

    ??????? {

    ??????????? for (k = 0; k < 5;k++)

    ??????????? {

    ??????????????? printf("%4d",a[i][j][k]);

    ??????????? }

    ??????????? printf("\n");

    ??????? }

    ??????? printf("\n\n\n");

    ??? }

    }

    ?

    int main(int argc, char *argv[])

    {

    ??? int a[3][4][5];

    ??? int num = 0;

    ??? //求得數組的大小為240

    ??? printf("%d\n",sizeof(a));

    ?

    ??? //線性初始化

    ??? for (int *p = &a[0][0][0]; p < &a[0][0][0] + 60;p++)

    ??? {

    ??????? *p = num;

    ??????? num++;

    ??? }

    ?

    ??? printArray(a);

    ?

    ??? system("pause");

    ??? return 0;

    }

    13.三維數組定義,并通過指針的方式打印出來

    #include<stdio.h>

    #include<stdlib.h>

    ?

    static void printArray(int (*p)[4][5])

    {

    ??? int i, j, k;

    ??? for (i = 0; i < 3;i++)

    ??? {

    ??????? for (j = 0; j < 4;j++)

    ??????? {

    ??????????? for (k = 0; k < 5;k++)

    ??????????? {

    ??????????????? //printf("%4d",p[i][j][k]);

    ??????????????? printf("%4d",*(*(*(p+i)+j)+k));

    ??????????? }

    ??????????? printf("\n");

    ??????? }

    ??????? printf("\n\n\n");

    ??? }

    }

    ?

    int main(int argc, char *argv[])

    {

    ??? int a[3][4][5];

    ??? int num = 0;

    ??? //線性初始化

    ??? for (int *p = &a[0][0][0]; p < &a[0][0][0] + 60;p++)

    ??? {

    ??????? *p = num;

    ??????? num++;

    ??? }

    ???

    ??? printArray(a);

    ??? system("pause");

    ??? return 0;

    }

    14.通過指針類型改變訪問數組訪問

    #include<stdio.h>

    #include<stdlib.h>

    ?

    int main(int argc,char *argv[])

    {

    ??? //創建一維數組

    ??? int *p = (int *)malloc(sizeof(int)* 40);

    ??? for (int *px = p, i = 0; px < p + 40; px++,i++)

    ??? {

    ??????? //賦值

    ??????? *px = i;

    ??????? //指針循環

    ??????? //printf("%d,%p\n",*px,px);

    ??? }

    ?

    ??? int b[5][8];

    ??? printf("\n\n\n");

    ??? //指針類型決定了訪問的方式

    ??? int(*pp)[8] = (int(*)[8])p;

    ??? for (int i = 0; i < 5;i++)

    ??? {

    ??????? for (int j = 0; j < 8;j++)

    ??????? {

    ??????????? //printf("%5d",pp[i][j]);打印數據

    ??????????? printf("%5d",*(*(pp+i)+j)); //pp[i][j]

    ??????? }

    ??????? printf("\n");

    ??? }

    ?

    ??? printf("\n\n\n");

    ??? int(*ppp)[2][5] = (int(*)[2][5])p;

    ??? for (int i = 0; i < 4; i++)

    ??? {

    ??????? for (int j = 0; j < 2;j++)

    ??????? {

    ??????????? for (int k = 0; k < 5;k++)

    ??????????? {

    ??????????????? //打印元素

    ??????????????? //printf("%5d",ppp[i][j][k]);

    ??????????????? printf("%5d",*(*(*(ppp+i)+j) + k));

    ??????????? }

    ??????????? printf("\n");

    ??????? }

    ??????? printf("\n\n\n");

    ??? }

    ?

    ??? system("pause");

    ??? return 0;

    }

    ?

    總結:下面左邊定義的數組和右邊的指針是等價的

    數組

    指針

    數組訪問

    指針訪問

    int a[i]

    int *p

    a[i]

    *(p + i)

    int a[i][j]

    int (*p)[j]

    a[i][j]

    *(*(p+i)+j)

    int a[i][j][k]

    int (*p)[j][k]

    a[i][j][k]

    *(*(*(p+i)+j)+k)

    int a[i][j][k][l]

    int (*p)[i][j][k]

    a[i][j][k][l]

    *(*(*(*(p+i)+j)+k)+l)

    ?

    總結

    以上是生活随笔為你收集整理的一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

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