指针和数组

#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\n",p);

  printf("%p\n",arr);

 

  *p=100;

  printf("%d\n",*p);//100

 

  p=p+1;//或p++;

//两个相邻的数组地址相差一个int类型大小

  printf("%p\n",arr);//0053FA00

  printf("%p\n",p);//0053FA04

 

  for(int i=0;i<10;i++)

  {

    //printf("%d\n",arr[i]);//100,2,3,4,5,6,7,8,97,98,

    //printf("%d\n",p[i]);//2,3,4,5,6,7,8,97,98,99

 

    //printf("%d\n",*arr);//100,100,100,100,100,100,100,100,100,100;*arr:打印值;arr:打印地址

 

//指针类型变量+1等于内存地址+sizeof(int)

    //printf("%d\n",*(arr+i));//arr+4:打印地址;*(arr+4):0+4=4,打印值5

    

    //printf("%d\n",*(p+i));//2,3,4,5,6,7,8,97,98,99

    //printf("%d\n",*p++);//2,3,4,5,6,7,8,97,98,99

  }

  printf("%p\n",arr);//0080F984;arr与p相差40

  printf("%p\n",p);//0080F9AC;数组下标越界,属于野指针

 

 

 

 

//两个指针相减,得到的结果是两个指针的偏移量(步长) ;所有指针类型相减结果都是int类型的

  int step=p-arr;

  printf("%d\n",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\n", sizeof(p));

  printf("数组大小:%d\n", 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\n",arr[i]);

  }

  return 0;

//结果

 

 

}

posted @ 2020-08-22 21:24  wh19991213  阅读(99)  评论(0编辑  收藏  举报