列印數組中的每個元素,列印每個元素的位址:
#include
<stdio.h>
<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();
指針數組
//輪詢數組的時候,可以用指針輪詢
//通過指針數組,可以管理位址
char *str[5]
= { "calc",
"notepad",
"tasklist",
"pause",
"mspaint" };
for (char
**pp =
str;
pp <
str + 5;pp++)
system(*pp);
數組指針(等價于二維數組)
#include<stdio.h>
#include<stdlib.h>
main(int
argc,
char *argv[])
//二維數組,等價于二級指針
char
str[5][10] = {
"calc",
printf("%p",str);
for (char(*p)[10]
= str;
str + 5;p++)
//列印位址
字元串
printf("\n%p,%s",p,p);
system((char
*)p);
return 0;
二維數組
argc,char
*argv[])
//指針位址一樣,但是類型不一樣
//str代表行位址,&str代表整個數組的位址,*str就是第一個字元的位址
printf("%p,%p,%p",str,&str,*str);
system("pause");
二維數組的開辟方式已經列印:
//開辟二維數組的空間
int **p;
p = (int
**)malloc(sizeof(int)*
10);
i,j;
for (i
= 0; i < 10;i++)
p[i]
= (int *)malloc(sizeof(int)*
//初始化數組
= 0; i < 10;
i++)
for (j
= 0; j < 10;
j++)
*(*(p +
i) +
j) =
i *
j;
putchar(10);
//通過指針的方式列印出二維數組
= 0; j < 10;j++)
printf("%d
", *(*(p
+ i) +
j));
指針的加減法:
//c語言運算規則,加法原則實際加上的是:元素的大小*加上的數
//減法原則實際上減去的是:元素的大小*減去的數
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);
p2 -
p3);
二維數組的列印問題
//将數組中的每個元素一個個列印出來
*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;
i = 0;
i < 3;
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));
//通過下标的方式實作
結構體數組
#include<windows.h>
struct
pos{
x;
y;
};
pos
pos2[8] = {
{ 100, 200 },
{ 100, 0 },
{ 200,400 },
{ 300,600 },
{ 390,600 },
{ 190,900 },
{ 990,100},
{1390,600}
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 } }
main()
hwnd *win
= findwindowa("notepad++",
"notepad++");
if (win
== null)
return;
setwindowpos(win,
null, 0, 0, 100, 300, 1);
i < 8;
//設定視窗位置大小
null,
pos1[i][0].x,
pos1[i][0].y,
pos1[i][1].x,
pos1[i][1].y,
1);
sleep(3000);
作為通過函數改變二維數組中各各參數的值,和列印相關的知識點
/************************************************************************/
/*
一維數組沒有副本機制,二維數組也沒有,數組作為參數都是傳遞位址
*/
searchmax(int
a[3][4])
//通過數組傳遞過來的數組,求大小的時候都是4(32位系統情況)
printf("\nsearch
= %d",sizeof(a));
b[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 };
b = %d",sizeof(b));
//下面開始求數組的最大值
max;
//存儲最大的值
max =
a[0][0];
i < 3;i++)
if (a[i][j]
> max)
//比較大小
//接收最大的位址
a[i][j];
return
max;
a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2 };
searchmax(a);
printf("\n二維數組的最大值為:%d\n",max);
求二維數組中元素的最小值
searchmin(int(*p)[4])
//假設第一個是最小的
//int min = p[0][0];
//同樣可以使用下面的方式實作
min = *(*(p
+ 0) + 0);
//第一種方式通過數組下标的方式實作
//if (p[i][j] <min)
//{
//
min = p[i][j]; //求出最小的數
//}
if (*(*(p
+i) +
j) <
min)
j);
min;
a[3][4] = { 1, 2, 3, 4, 5, 16, -7, 8, 9, 10, 1, 2 };
printf("\nmin
= %d\n",searchmin(a));
通過指針的方式實作求二維數組中的最大值
二維數組退化為一個指向有4個元素的數組的指針 */
static
searchmax(int(*p)[4])
//存儲最大值
p[0][0];
if (p[i][j]
> max)
p[i][j];
}
= %d\n",searchmax(a));
12.三維數組定義,并通過數組的方式列印出來
printarray(int
a[3][4][5])
i,j,k;
= 0; i < 3;i++)
= 0; j < 4;j++)
for (k
= 0; k < 5;k++)
printf("%4d",a[i][j][k]);
a[3][4][5];
num = 0;
//求得數組的大小為240
printf("%d\n",sizeof(a));
//線性初始化
*p = &a[0][0][0];
p < &a[0][0][0]
+ 60;p++)
num;
num++;
printarray(a);
13.三維數組定義,并通過指針的方式列印出來
(*p)[4][5])
i,
j,
k;
//printf("%4d",p[i][j][k]);
printf("%4d",*(*(*(p+i)+j)+k));
14.通過指針類型改變通路數組通路
//建立一維數組
int *p
40);
*px =
p,
px <
p + 40;
px++,i++)
//指派
i;
//指針循環
//printf("%d,%p\n",*px,px);
b[5][8];
//指針類型決定了通路的方式
int(*pp)[8]
= (int(*)[8])p;
i < 5;i++)
j < 8;j++)
//printf("%5d",pp[i][j]);列印資料
printf("%5d",*(*(pp+i)+j));
//pp[i][j]
int(*ppp)[2][5]
= (int(*)[2][5])p;
i < 4;
j < 2;j++)
k = 0;
k < 5;k++)
//列印元素
//printf("%5d",ppp[i][j][k]);
printf("%5d",*(*(*(ppp+i)+j)
+ k));
總結:下面左邊定義的數組和右邊的指針是等價的
數組
指針
數組通路
指針通路
int a[i]
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)