目录
指针常量与一维数组的关系
(指针常量不可以++,--,但可以+1,-1)
数组名的含义:
1.数组首元素的地址
2.整个数组
此时地址的类型为:int *
访问数组中的每个元素:a[i] *(a+i)
指针变量与一维数组的关系
访问数组中的每个元素:*(p+i) *(p++) p[i]
#include <stdio.h>
#define N 5
int main()
{
int i=0;
int a[N]={0};
printf("请输入%d个整型数\n",N);
int *p=NULL;
p=a; //p=&a[0];
for (i=0;i<N;i++)
//五种方法输入
{
//scanf("%d",&a[i]);
//scanf("%d",a+i);
//scanf("%d",p+i);
//scanf("%d",&p[i]);
scanf("%d",p++);//注意:此时p指向发生改变 指针指向数组最底部 所以是随机值因此 需要指回来
}
p=a; //指针指回来
//五种方法输出
for (i=0;i<N;i++)
{
//printf("%d %d %d %d",p[i],*(a+i),*(p+i),a[i]);
printf("%d",*(p++));
}
p=a;
return 0;
}
冒泡排序
指针指向不发生改变
//功能:排序
//参数1:这篇空间的地址:&a[0]就是数组名:int*
//参数2:进行排序的数组的个数,元素的个数:int
void sort_array(int *p,int n)
{
int temp=0;
int i=0;
int j=0;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*(p+j)>*(p+j+1))
{
temp=*(p+j+1);
*(p+j+1)=*(p+j);
*(p+j)=temp;
}
}
}
output_array(p,n);
}
指针指向发生改变
#include<stdio.h》
#define N 5
int main()
{
int temp=0;
int i=0; //空置比较的趟数
int j=0; //控制比较的次数
int k=0; //遍历数组
int *p=arr; //定义一个指针指向arr数组中的第一个元素
int arr[N]={0};
printf("请输入%d个整型数\n",N);
for(k=0;k<N;k++)
{
scanf("%d",p++);
}
p=arr;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*p>*(p+1))
{
temp=*(p+1);
*(p+1)=*p;
*p=temp;
}
p++;
}
p=arr;
}
for(k=0;k<N;k++)
{
printf("%d",*(p++));
}
printf("\n");
return 0;
}