sizeof(数组名):数组名表示整个数组,计算的是整个数组的大小,单位是字节;
&数组名:数组名表示整个数组,取出的是整个数组的地址。
(数组名是数组首元素的地址,类型是int*,+1就是跳过一个整型)
除此之外,数组名表示数组首元素的地址。
1.使用指针访问数组(数组在内存中是连续存放的;指针的加减整数运算,方便获得每一个元素的地址)
int main()
{
int arr[10]={0};
int *p=arr;
int i=0;
for(i=0;i<10;i++)
{
sacnf("%d",p+i);(或者写arr+i)
}
for(i=0;i<10;i++)
{
printf("%d",*(p+i));(或者写*(arr+i)/arr[i]/p[i])
}
return0;
}
arr[i]===>*(arr+i)
arr[i]===>i[arr]
数组就是数组,是一块连续的空间;
指针(变量)是指针(变量),是一个变量(4/8个字节)
数组名是地址,是首元素的地址,可以使用指针来访问数组。
2.一维数组的传参
数组传参的时候,形参是可以写成数组的形式的,但是本质上还是指针变量
数组传参的本质是传递了数组首元素的地址,所以形参访问的数组和实参的数组是同一个数组,形参的数组是不会单独创建数组空间,所以形参的数组是可以省略大小的。
3.冒泡排序(两两相邻的元素进行比较)
bubble_sort(int arr[],sz)
{
int i=0;
for(i=0;i<sz-1;i++)
{
int j=0;
int flag=1'
for(j=0;j<sz-1-i;j++)
{
int tmp=0;
if(arr[j]>arr[j+1])
{
tmp=arr[j];
arr[j]=arr[j+1];
arr[j]=tmp;
flag=0;
}
}if(flag==1)
{break;}
}
}
4.二级指针
int a=10;
int *p=&a;
int **pp=&p;
5.指针数组(存放指针)
6.使用指针数组模拟二维数组
int main()
{
int arr1[]={1,2,3,4,5};
int arr2[]={2,3,4,5,6};
int arr3[]={3,4,5,6,7};
int *arr[]+{arr1,arr2,arr3};
int i=0;
for(i=0;i<3;i++)
{
int j=0;
for(j=0;j<5;j++)
{
printf("%d",arr[i][j]);===>*(*(arr+i)+j)
}
printf("\n");
}
return 0;
}