#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main01()
{
//数组名是一个常量,不允许被赋值;数组名是数组元素首地址
int arr[]={100,2,3,4,5,6,7,8,'a','b','c'};
//arr=100;//err
int*p;
p=arr;
printf("%p ",p);
printf("%p ",arr);
*p=100;
printf("%d ",*p);//100
p=p+1;//或p++;
//两个相邻的数组地址相差一个int类型大小
printf("%p ",arr);//0053FA00
printf("%p ",p);//0053FA04
for(int i=0;i<10;i++)
{
//printf("%d ",arr[i]);//100,2,3,4,5,6,7,8,97,98,
//printf("%d ",p[i]);//2,3,4,5,6,7,8,97,98,99
//printf("%d ",*arr);//100,100,100,100,100,100,100,100,100,100;*arr:打印值;arr:打印地址
//指针类型变量+1等于内存地址+sizeof(int)
//printf("%d ",*(arr+i));//arr+4:打印地址;*(arr+4):0+4=4,打印值5
//printf("%d ",*(p+i));//2,3,4,5,6,7,8,97,98,99
//printf("%d ",*p++);//2,3,4,5,6,7,8,97,98,99
}
printf("%p ",arr);//0080F984;arr与p相差40
printf("%p ",p);//0080F9AC;数组下标越界,属于野指针
//两个指针相减,得到的结果是两个指针的偏移量(步长) ;所有指针类型相减结果都是int类型的
int step=p-arr;
printf("%d ",step);//1
return EXIT_SUCCESS;
}
int main02()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//指向数组的指针;p是变量,可以改变;arr是常量,不可改变
int*p = arr;
//p是一个指针,4个字节大小;arr是一个数组,40个字节大小
printf("指针类型大小:%d ", sizeof(p));
printf("数组大小:%d ", sizeof(arr));
return 0;
//结果
}
//数组作为函数参数会退化为指针,丢失数组的精度(数组元素个数)int*arr
void BubbleSort(int arr[],len)
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)
{
/* if(arr[j]>arr[j+1]
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
} */
if((*arr+j)>*(arr+j+1));
{
int temp=*(arr+j);
*(arr+j)=*(arr+j+1);
*(arr+j+1)=temp;
}
}
}
}
int main()
{
int arr[] = { 9,1,5,6,3,8,10,2,7,4 };
BubbleSort(arr, 10);
for(int i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
//结果
}