指针和数组的关系

指针和数组的关系

1.一维数组

    Int  a[5]={1.2.3.4.5}

1) P=&a[0]p=a等价)

                      C语言中数组名就是该数组的首地址

2)printf("%d",a[1]);

       printf("%d",*(a+1)); 当我们以前使用a[1]的时候,

                         事实上计算机内部自动将其转换为*(a+1)

   3 int a=[5];

       int i*p=a;

for(i=0;i<5;i++p++){

scanf("%d",p);

}

for(i=0;i<5;i++p++){

Printf("%d",*p);

注释里的内容不能够删除否则指针变量p就会指超出到a数组

4)上面程序p++不能换成a++

      (因为p是指针变量。本身的值是可以变化的,

        a虽然也是地址。But他是一个常量不能对一个常量自减或者自加)

2.二维数组

在二维数组中第一个下标代表行地址

                第二个下标代表列地址

  Egint a[2][3]={1,2,3,4,5,6};

    a[0]代表第一行的首地址

    a[1]代表第二行的首地址

    printf("%d",*(a[0]+2));

元素

行地址

列地址

a[1][2]

a[1]

a[1]+2

*(a[1]+2)

*a+1

**a+1+2

*(*(a+1)+2)

3.字符串指针

      C语言中,有2种方式可以访问字符串1)通过字符数组访问2)指针访问

4.指针数组

      1)什么是指针数组:一个数组中所有的数据类型都是指针类型那么这就是指针数组   

      2)指针数组最大的好处是用来处理多字符串

       因为我们的字符串本身就是用字符数组来储存的,如果涉及到多条字符串,就必须

       用到二维字符数组。

   定义一个指针数组

  Char *p[]//这里我们定义一个指针数组;

     Egchar *p[3]={

          "movie"

           "movie1"

            "movie2"}

m

o

v

i

e

m

o

v

i

e

1

5.void指针类型和NULL类型

  定义指针以后必须进行初始化,不然很危险,因为它不知道该指向哪

  如果不知道指到哪那就让它为空(NULL

Eg:    int  *i;

        I=NULL

void指针类型

可以指向任何类型的c数据,也就是说可以用任何类型的指针变量给void类型赋值,但是当void类型指针要转成其他类型的时候,必须使用强制转换

Eg:  int i=10;

int *p,*m;

void *q;

p=&i;

q=p;

m=(int*)q;

printf("%d",*m);

6.多级指针(又叫指针的指针)

int i=10;

int *p=&i;

int **q=&p;

int ***r=&q;

printf("%d ",***r);//输出i的值

printf("%d ",**r);//输出p的值

printf("%d ",*r);//输出q的值 

原文地址:https://www.cnblogs.com/cp168168/p/6002311.html