数组和指针的初步学习

原创 2018年04月15日 17:50:32

数组:包含了同一类型的多个数据元素的集合  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;

 

}


c++学习ppt

  • 2017年01月15日 17:41
  • 451KB
  • 下载

黑马程序员-C语言数组与指针学习心得

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、数组的赋值,以下几种都是正确的: 1、int ages[5]={1,2,3,4,5}; 2、...
  • u012749656
  • u012749656
  • 2015-05-28 23:33:01
  • 639

C语言再学习 -- 再论数组和指针

之前有总结指针数组,但是现在看来总结的太简单了。好多重要的知识点都是一带而过的。本想在后面添加后来想想算了,还是再写一篇文章来详细介绍数组和指针这对冤家吧。 之前总结的,参看:C语言再学习 -- 数...
  • qq_29350001
  • qq_29350001
  • 2017-01-18 10:48:07
  • 2008

c语言指针的初步学习与详解

  • 2015年11月20日 12:13
  • 1.05MB
  • 下载

数组与指针

  • 2018年04月13日 15:55
  • 764KB
  • 下载

关于指针的初步学习

指针变量的声明虽然指针是内存地址,而且内存地址是数字,但不能将指针存储到int或double类型的变量中。容纳指针的变量必须声明为指针类型Type_Name *Variable_Name1, *Var...
  • mir_age
  • mir_age
  • 2017-05-21 16:01:17
  • 125

数论初步学习

(一)线性筛法 欧拉线性筛的流程是 对于每一个数, 扫一遍比它小的所有质数, 把这个数和这个质数的积标记为合数, 当这个数是这个质数的倍数的时候就break掉。 它实际上想要实现的只有一句话: 让每一...
  • czysjr
  • czysjr
  • 2014-12-05 08:18:05
  • 385

探讨下C++中的数组和指针的区别

最近一段时间在研究虚拟现实方面的内容,有一段时间没写代码,重拾C++,顺便记录下C++中容易出错的内容,数组和指针的区别。很多新手都抱怨说C++难,尤其是指针和数组,傻傻分不清楚,那么我就从我对数组和...
  • transferli
  • transferli
  • 2016-03-24 13:04:45
  • 444

C语言学习课件

  • 2014年12月04日 07:31
  • 1.45MB
  • 下载

面向对象程序设计课件

  • 2010年05月11日 10:44
  • 999KB
  • 下载
收藏助手
不良信息举报
您举报文章:数组和指针的初步学习
举报原因:
原因补充:

(最多只允许输入30个字)