******************** 数组指针的概念 ********************

------Java培训、Android培训、iOS培训、.Net培训、期待与您交


//********************  数组指针的概念  ********************


//数组只能:   指向数组元素的指针




#include <stdio.h>


int main(int argc, const char * argv[]) {

    // 定义一个变量

    int num = 10;

    //定义一个指针变量,指向的是一个整形变量

    int *p = &num;

    

    //定义一个数组

    

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

    

    //这是数组指针

    int *p1=&a[1];

    int *p2=a;

    

    printf("%d\n",*p1);

    return 0;

}




//********************  一维指针数组  ********************




#include <stdio.h>


int main(int argc, const char * argv[]) {

   

    //定义整型数组

    

    int a[10] = {1,3,4,5,6,7,8,9,10};

    

    //定义指针数组

    

    int *parr[4] = {&a[1],&a[3],&a[5],&a[8]};

    

    //下标

    // &parr[i] 整型数组元素的地址

    

    //parr[i]  存放整型数组元素地址的地址

    

    for(int i = 0;i < 4;i++){

        printf("&parr[%d] = %p,parr[%d] = %p\n",i,&parr[i],i,parr[i]);

    }

    

    //运行一下看打印出得结果,都是一样的

    printf("%d\n",*parr[0]);

    printf("%d\n", *(*parr + 0));

    printf("%d\n", **parr);

    

    

    printf("%d\n", *(parr[3]));

    printf("%d\n",*(*(parr+3)));

    return 0;

}



//  **********   使用指针引用数组元素

//

//  Created by 李佳乐 on 15-3-17.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//


#include <stdio.h>


int main(int argc, const char * argv[]) {

    // 定义数组

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

    

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

        printf("&a[%d]=%p,a[%d]=%d\n",i,&a[i],i,a[i]);

    }

    

    

    //**********   定义一个数组指针(指向数组元素的指针)

    

    

    int *p = a;   //a = a[0]

    

    //   p的地址是a[0]

    

    

    printf("p + 1 = %p\n",p +1); // p + 1 == &a[1] == &a[0 + 1]

    printf("p + 1 = %d\n",*(p+1));//a[0 + 1]

    

    //**********   用数组指针的方式打印出数组元素的地址和值

    

    

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

        printf("p + %d =%p, *(p + %d) = %d\n",i,p+i,i,*(p+i)); // a = p 他俩的地址相同

    }

    //**********   用指针偏移,来访问数组中所有的元素

    

    

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

        printf("*(p++) = %d\n",*(p++));

    }

    printf("Hello, World!\n");

    return 0;

}



//

//  main.c

//  用指针将数组逆序存放

//

//  Created by 李佳乐 on 15-3-17.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*

#include <stdio.h>


void niXuArray(int arr[],int len){

    //定义数组元素的下标

    int i = 0,j = len -1;

    //定义指针变量

    int *p = arr;

    //定义临时变量

    int temp;

    //循环

    while(i<j){

        //*(arr+i) = *(p + i)

        //最前边的元素的值与最后边的元素的值交换

        temp = *(p+i);

        *(p+i) = *(p+j);

        *(p+j) = temp;

        

        i++,j--;

    }

}


int main(int argc, const char * argv[]) {

    

    //定义函数(参数:传递数组名,数组长度)

    //定义变量

    //循环

    //交换

    

    //定义数组

    int num[10]={1,2,3,4,5,6,7,8,9,10};

    //调用前打印的数组内容

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

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

    }

    printf("\n-------------------------\n");

    //调用函数

    niXuArray(num,10);

    //调用后打印的函数数组

    

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

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

    }

    

    return 0;

}

*/

//使用指针逆序存放


#include <stdio.h>

//定义一个函数

void niXu(arr[],len){

    //定义变量

    int i = 0,j = len - 1;

    //定义指针变量指向数组的首地址

    int *p = arr;

    //循环  如果第一项大于最后一项 交换

    while(i < j){

        int temp;

        temp = *(p+i);

        *(p+i)=*(p+j);

        *(p+j)=temp;

        

        i++,j--;

    }

}


int main(){

    //定义一个数组

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

    //调用函数

    niXu(num, 6);

    for(int i = 0;i<6;i++){

        printf("%d\t",num[i]);

    }

    return 0;

}



//  使用一级指针也可以遍历二维数组

//

//  Created by 李佳乐 on 15-3-17.

//  Copyright (c) 2015 gongsimingzi. All rights reserved.

//

/*

#include <stdio.h>


int main(int argc, const char * argv[]) {

    // 定义一个二维数组

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

    

    int *p =a;

    //二维数组在内存中是线性存储的

    for(int i = 0;i < 6;i++){

        printf("%d    ",*(p + i));

    }

    printf("Hello, World!\n");

    return 0;

}

*/


#include <stdio.h>


int main(){

    //定义一个二维字符串

    char arr[2][3]={"abc","def"};

    

    char *p = arr;

    

   

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

    

    

    return 0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值