指针高级

//

//  main.c

//  指针高级

//

//  Created by zhangxueming on 15/6/4.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#include <stdio.h>

//指针的数组(指针数组)

//本质是数组, 数组中的每一个元素都是指针变量

//int *p[10];

//p[0]~p[9] 都是一个 int *指针变量



//定义一个一维字符指针数组,并利用不定数量(不多于10)个字符串将其初始化,然后将各字符串输出。

//比如:

//输入

//asdfw uuio fff tyu

//

//输出为

//tyu

//fff

//uuio

//asdfw



//str[0]

//char str[10][100]--> char [100] --> char *



//在内存栽中操作

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

//    char *ps[10]={NULL};

//    char str[10][100]={};//str[0]   &str[0][0]  char *

//    int cnt=0;

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

//        ps[i]= str[i];

//        scanf("%s",ps[i]);

//        cnt++;

//        if (getchar()=='\n') {

//            break;

//        }

//    }

//    for (int i=0; i<cnt; i++) {

//        printf("%s\n", ps[i]);

//    }

//    return 0;

//}

#include <stdlib.h>

//在内存堆中操作

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

//{

//    char *ps[10]={NULL};

//    int cnt=0;

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

//        ps[i]=(char *)malloc(100*sizeof(char));

//        if (!ps[i]) {

//            return -1;

//        }

//        scanf("%s", ps[i]);

//        cnt ++;

//        if (getchar()=='\n') {

//            break;

//        }

//    }

//    for (int i=0; i<cnt; i++) {

//        printf("%s\n", ps[i]);

//        free(ps[i]);

//        ps[i]=NULL;

//    }

//    return 0;

//}



//利用指针数组求二维数组元素的和



//int sum(int *p[], int len1, int len2)   // 形参 int *p[] ==int **p

//{

//    int sum=0;

//    for (int i=0; i<len1; i++) {

//        for (int j=0; j<len2; j++) {

//            //sum+=p[i][j];// p[i][j] --> *((*(p+i))+j)

//            //sum+=(*(p+i))[j];

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

//        }

//    }

//    return sum;

//}

//

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

//{

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

//    

//    int *p[3]={NULL};

//    for (int i=0; i<3; i++) {

//        p[i]=a[i];

//    }

//    printf("sum = %d\n", sum(p,3,2));

//    

//    return 0;

//}





//数组的指针(数组指针)

//数组类型的指针,本质是指针变量,数据类型是数组类型的

//int (*p)[3]; --> int (*)[3]   int [3]

//p是一个向有三个元素的一维数组的指针



//&a[0]

//int a[5][4]<==> int (*&a[5])[4] --> int (*)[4]



//a[0]

//int a[5][4]--> int a[0][4] --> int [4] --> int *



//a

//int a[5][4] --> int [5][4] --> int (*)[4]



//&a

//int a[5][4] <==> int (*&a)[5][4] --> int (*)[5][4]



//&a[0][0]  --> int *





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

//{

//    //printf("size = %ld\n", sizeof(int [5]));

//    

//    int a[5][4]={};

//    int (*p)[4]=a;//int (*)[4]  int *

//    

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

//    p++;

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

//    p++;

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

//    

//    return 0;

//}

//传递一维数组的指针

int sum1(int(*p)[2], int len)// *(int (*p)[2]) --> int [2]

{

    int sum=0;

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

        for (int j=0; j<2; j++) {

            //sum+=p[i][j];

            //sum+= (*(p+i))[j];

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

        }

    }

    return sum;

}

//传递二维数组的指针

int sum2(int (*p)[3][2])//*p  int [3][2] --> int (*)[2]

{

    int sum=0;

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

        for (int j=0; j<2; j++) {

            //sum+= (*p)[i][j];

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

        }

    }

    return sum;

}

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

{

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

    //printf("sum = %d\n", sum1(a,3));

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

    

    return 0;

}

 

你可能感兴趣的:(指针)