数组和指针的初步学习

数组:包含了同一类型的多个数据元素的集合  eg:int a[5] 表明定义了一个数组,其包含5个int型的数据

指针:在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量 eg:int *p  变量p是指向int型变量的指针

 

数组的概念

int arr[5]={}  表示定义了一个int型数组,其数组名是arr,数组长度是5

int arr[5]={0}; 表示定义了一个int型数组,其数组名是arr,数组长度是5,arr[0]的值初始化为0

int arr[5]={1,2}; 表示定义了一个int型数组,其数组名是arr,数组长度是5,arr[0]=1,arr[2]=2

int arr[]={1,2}; 表示定义了一个int型数组,其数组名是arr,该数组默认长度为2

 

数组下标:数组元素的引用要指定下标,一般形式为数组名[下标],下标的取值范围为(0,数组长度-1)

 

数组的使用 利用for循环进行初始化

#include<stdio.h>

int main()

{

    int arr[5];

    for(int i=0;i<5;i++) //注意:数组下标要从0开始

    {

        arr[i]=i;

        printf("%d ",arr[i]);

    }

    return 0;

}

一维数组名:有两种情况代表整个数组

1.    sizeof(arr):代表整个数组的字节长度

eg: int arr[5];

int len=sizeof(arr)/sizeof(arr[0]);//数组的长度(sizeof(arr)=20,sizeof(arr[0])=4,len=20/4=5)

2.&arr+1(跳到数组的末尾后的位置)

 

数组越界访问=访问非法地址(哨兵位)(会报错)

#include<stdio.h>

int main()

{

    int a=10;                                            

    int a1=20;

    int arr[5]={0,1,2,3,4};

    printf("%d\n",&a);

    printf("%d\n",&a1);

    printf("%d\n",&arr[0]);

    printf("%d\n",&arr[4]);                  

  return 0;

}//输出结果为

 15728352

 15728340

 15728312

 15728328

此时变量是以栈的形式进出的(栈;后进先出) 

             

arr[1]  *(arr+1)的区别

#include<stdio.h>

int main()

{

    int arr[5]={1,2,3,4,5};

    printf("%d\n",arr[1]);//输出下标为1的元素

    printf("%d\n",*(arr+1));//输出第二个地址所指向的内容

    return 0;

}

指针的运用

#include<stdio.h>

int main()

{

    int a=10;

    int *p=&a;

    printf("%d\n",*p);// //指针p指向了a的地址,此时*p所指向的内容为a的值,所以输出结果为10(解引用,*是间接引用符)

    *p=100;

    printf("%d\n",*p); //*p所指向的内容被重新赋值为100,所以输出结果为100

    return 0;

}

定义功能函数时 int Fun(int arr[ ];int len)  等价于int Fun(int*arr,int len)

arr数组名相当于数组元素的首地址

任何指针的大小都是4个字节

#include<stdio.h>

int main()

{

    int a=10;

    int *p=&a;

    printf("%d\n",sizeof(p));//求int型指针p的字节大小,结果为4

    char ch='a';

    char *t=&ch;

    printf("%d\n",sizeof(t));//求char型指针t的字节大小,结果为4

    return 0;

}

野指针

int *p;//*p没有初始化,会出现报错  预防野指针的一种方法:int *p=NULL;

    *p=30;

    printf("%d",*p);

 

//交换两个数的功能函数

#include<stdio.h>

void Fun(int *p1,int *p2)

{

    int temp=*p1;

    *p1=*p2;

    *p2=temp;

   

}

int main()

{

    int a=10,b=20;

    Fun(&a,&b);

    printf("%d %d",a,b);

    return 0;

 

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值