一、数组
1、一维数组
#include<stdio.h>
#define MAX_SIZE 3
int main()
{
int a[MAX_SIZE] = {0};
int (*pa)[MAX_SIZE];
pa = a;
int i;
int *p = a;
printf("a = %p\n",a);
printf("&a = %p\n",&a);
for(i = 0; i < MAX_SIZE; i++)
{
scanf("%d",&a[i]);
//scanf("%d",a+i);
//scanf("%d",p+i);
//scanf("%d",&p[i]);
//scanf("%d",p++);
//scanf("%d",*pa+i);
}
p = a;
for(i = 0; i < MAX_SIZE; i++)
{
printf("a[%d] = %d\n",i,a[i]);
//printf("a[%d] = %d\n",i,*(a+i));
//printf("a[%d] = %d\n",i,*(p+i));
//printf("a[%d] = %d\n",i,p[i]);
//printf("a[%d] = %d\n",i,*(p++));
//printf("a[%d] = %d\n",i,&((*pa)[i]));
}
return 0;
}
注明:
printf(“a = %p\n”,a);// 指针常量,数组元素首地址
printf(“&a = %p\n”,&a);//数组的元素
&a:对一维数组的数组名取地址等于数组的地址;
*(&a) = a :对一维数组的地址取值等于数组首元素的地址
2、二维数组
#include<stdio.h>
int main()
{
int a[2][2] = {1,2,3,4};
//int a[][2] = {1,2,3,4};
printf("sizeof(a) = %d\n",sizeof(a));
int i;
int j;
for(i = 0;i < 2; i++)
{
for(j = 0; j < 2; j++)
{
scanf("%d",&a[i][j]);
//scanf("%d",*(a+i)+j);
}
}
for(i = 0; i < 2; i++)
{
for(j = 0; j < 2; j++)
{
printf("a[%d][%d] = %d\n",i,j,a[i][j]);
//printf("a[%d][%d] = %d\n",i,j,*(*(a+i)+j));
}
}
return 0;
}
二维数组名:首个一维数组的地址
*a:数组首元素的地址
*(*(a+i)+j):
a+i:第i+1个一维数组的地址
*(a+i):第i+1个一维数组首元素的地址
*(a+i)+ j:第i+1个一维数组的j+1个元素的地址
*(*(a+i)+j):第i+1个一维数组的第j+1个元素的值
3、三维数组
三维数组名:首个二维数组的地址
*(*(*(a+i)+j)+k):
a+i:第i+1个二维数组的地址
*(a+i):第i+i个二维数组的首个一维数组的地址
*(a+i)+j:第i+1个二维数组的第j+1个一维数组的地址
*(*(a+i)+j):第i+1个二维数组的第j+1个一维数组的首元素的地址
*(*(a+i)+j)+k:第i+1个二维数组的第j+1个一维数组的第k+1个元素的地址
*(*(*(a+i)+j)+k):第i+1个二维数组的第j+1个一维数组的第k+1个元素的值
4、字符的二维数组
#include<stdio.h>
int main()
{
char src[3][100];
char (*p_src)[3][100];
p_src = &src;
int i;
for(i = 0; i < 3; i++)
{
//scanf("%s",src[i]);
scanf("%s",(*p_src)[i]);
}
for(i = 0; i < 3; i++)
{
printf("src[%d][100] = %s\n",i,src[i]);
}
return 0;
}
p_src:数组指针变量,指向二维数组的地址
5、数组指针
int main()
{
char src[3][100] = {“hello1”,“hello2”,“hello3”};
char ptr[100] = “hello world”;
char ktr[2][3][100] = {...}
print_ptr(ptr);
return 0;
}
传一维数组,用元素的指针来接
void print_ptr(char *ptr)
传二维数组,用一维数组的指针来接
void print_src(char (*src)[100]) //步长问题 **src不可以
传三维数组,用二维数组的指针来接
void print_ktr(char (*ktr)[3][100])
6、指针数组
该数组里的指针都是野指针,都必须要分配空间
#include<stdio.h>
int main()
{
int *pa[3];
int i;
for(i = 0; i < 3; i++)
{
pa[i] = (int *)malloc(sizeof(int));
scanf("%d",pa[i]);
printf("pa[%d] = %d\n",i,*(pa[i]));
}
return 0;
}
二维数组占用实际字节,指针数组占用4个字节
若出现**ptr 要么是指针变量的地址要么是指针数组
未完待续~~~