********* 二维数组指针,指针字符串,指针函数,函数指针 *********



//  二维数组指针定义.初始化

//

//  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[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

    

    //定义一个二维数组指针

    int (*p)[4]=a;

    

    //使用二维数组指针遍历

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

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

            printf("%d\t",*(*(a+i)+j));

        }

        printf("\n");

    }

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

    return 0;

}




//  用数组名访问二维数组

//

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

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

//

// ******************* a[i]+j 代表的是a[i][j]的坐标


// ******************* *(a[i]+j) 代表的是a[i][j]的值


#include <stdio.h>


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

    // 定义一个二维数组

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

    printf("a=%p,a[0]=%p,&a[0][0]=%p\n",a,a[0],&a[0][0]);//地址相同

    

    

    //*(*(a+i)+j)   代表a[i][j]的值

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

    printf("a[0]+2=%p ==  &a[0][2] = %p ----> %d\n",a[0]+2,&a[0][2],*(a[0]+2));

    printf("a[0]+3=%p ==  &a[0][3] = %p ----> %d\n",a[0]+3,&a[0][3],*(a[0]+3));

    

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

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

            printf("a[%d][%d] = %d \n",i,j,*(*(a+i)+j));

        }

    }

    

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

    return 0;

}



//  字符串指针

//

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

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

//



/*

 字符串指针

 

 定义: char *字符串指针变量名="字符串"内容;

 

 用来保存一个字符串

 

 常量区 就是存储一个已经被缓存的常量 

 经常使用  常量区不可以对常量进行修改

 在常量区保存的数据都只读的

 */


/*

#include <stdio.h>


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

    // "asdgfsadfgsdfg" 这个字符串存储在常量区

    //str 只保存了字符串常量的首地址

    char *str="asd";

    

    //指针变量都是占用8个字节

    printf("%ld\n",sizeof(str));

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

    //str是指针变量

    //str重新指向另外一个字符串常量 "i love you"

    //保存的是"i love you"字符串常量的首地址

    

    str = "i love you";

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

    

    char ch[]="abc"; //字符串数组存在栈区,可以进行修改

    ch[2]='z';

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

    

    //读取字符串常量的某个字符

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

        printf("%c\t",*(str+i));

    }

 

    return 0;

}

*/


//字符串指针  指向的时一个字符串的首地址


#include <stdio.h>


int main(){

    

    //定义一个字符串指针

    char *str="abc";

    //str是变量,所以可以改变指向,而字符串是常量,所以不可以重新修改

    

    str = "hello";

    

//    //变量字符串的元素

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

//        printf("%c\n",*(str+i));

//    }

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

    

    return 0;

}




//  指针函数

//

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

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

//


//指针函数返回值为一个地址(它是一个函数,返回值为地址)


//#include <stdio.h>

//定义一个函数,传递两个整数,返回大数的地址

/*

int * max(int *pa,int *pb){

    

    return *pa > *pb ? pa : pb;

    

}


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

    // 定义两个变量

    int a = 10,b = 5;

    

    printf("a = %p\nb = %p\n",&a,&b);

    int *p = max(&a,&b);

    

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

    return 0;

}

*/

#include <stdio.h>

//定义一个指针函数


int * max(int *pa,int *pb){

    return *pa>*pb? pa : pb;

}


int main(){

    //定义两个变量

    int a=10,b=5;

    printf("a = %p\nb = %p\n",&a,&b);

    

    //定义指针的同时初始化

    int *p = max(&a, &b);

    

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

    

    return 0;

}




//  函数指针

//

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

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

//

/*

 函数指针的定义格式

 被指向的函数的返回值类型 (*函数指针变量名)(被指的函数的参数)

 

 

 

 */


/*

#include <stdio.h>


int max(int x,int y){

    

    return x > y? x : y;

    

}


int sum(int x,int y){

    

    return x+y;

}


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

    // 定义了一个函数指针,指针变量名是pmax,它只能指向返回值是int 并且有两个int类型参数的函数

  //  int (*pmax)(int x,int y);

    //得到了指向函数的返回值

    int (*p)(int x,int y);

    int a = 5;

    

    if(a >5){

        p = max;

    }else{

        p = sum;

    }

    //函数指针的使用

    

    int m = (*p)(438,78);//int m = p(438,78);

    

    printf("%d\n",m);

    return 0;

}

*/


//函数指针  定义一个函数指针 指向的是函数的首地址,得到函数的返回值


#include <stdio.h>

//定义一个函数

int sum(int x,int y){

    return x+y;

}


int cheng(int x,int y){

    return x * y;

}

int main(){

    

    //定义一个函数指针

    int (*p)(int x,int y);

    //给函数指针初始化

    p = sum;

    //调用

    int m = (*p)(10,5);

    

    printf("%d\n",m);

    

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值