【c语言--指针】关于指针的一些应用

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 4


/****************************
*指针要点回顾 
*   指针变量与指针的概念: 指针(存储单元地址,常量)
                            指针变量(存放存储单元地址的变量) 
*       
*   a[i] + j = &a[i][j]
*   *(a[i] + j) ~ a[i][j] 
*****************************/
void test() {
    /**
    *说明,学过汇编过后再来体会指针发现指针就是一个寄存器寻址方法访问变量
    *在微机接口讲到的关于 
    */
    int x = 10;
    int *tail;
    tail = &x;
    *tail = 1;      
    printf("%d\n",x); 
    //说明的问题是&和*运算符都具有从右到左的结合性 
    printf("%u\n", &x);
    printf("%u\n", &tail);  
    printf("%u\n", &(*tail));
    printf("%u\n", &*tail);

    int **temp;
    temp = &tail;
    printf("%u\n",&*temp);  

}


void test2() {

    int s[3][N] = {{0,1,2,3},{1,2,3,4}, {2,3,4,5}};

    //使用一级指针方式输出二维数组
    printf("\n###########一级指针访问二维数组的两种方法#####################\n");
    int *p;
    p = &s[0][0];

    for (; p <= &s[2][N - 1]; p++) {
        printf("%-4d",*p);
        if ( ((p - &s[0][0]) % 4) == 3 ) {
            printf("\n");
        }
    } 
    printf("\n");
    //第二种方法

    p = &s[0][0];   //把指针重新移到s[0][0]位置 
    for (int i = 0; i < 3; i++) {
        for(int j =0; j < N; j++) {
            printf("%-4d",*(p + i*4 + j));
        }
        printf("\n");
    } 

    printf("\n****************指向一维数组的指针变量************************************\n");
    int (*point)[N];    
    //第一种方式访问二维数组---行指针 
    point = s;

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < N; j++) {
            printf("%-4d",point[i][j]);
        }
        printf("\n");
    }

    //第二种方式 
    printf("\n******************方式二********************************\n");
    point = s;
    for (;point < s + 3; point++) {
        for (int j = 0; j < N; j++) {
            printf("%-4d",*(*point + j )); //*(*p + j) 等价于(*p)[j] 
        }
        printf("\n");
    } 

    printf("%d",sizeof(s)/sizeof(int));

} 

int fact(int n) {
    return n;
} 
int main() {

//  test2();
    /**指针函数 
    *关于返回值是指针的使用 
    *ex:char *f();这样定义主要是常常用到返回值是一个数组的情况,同理可证返回 
    *值是int,double,float,等类型数组时 
    */ 

    /**关于函数指针的使用
    *在学过汇编(子程序)过后在来反思c语言中的函数之后便会又有新的收获 
    *
    */ 
    int (*p)(int);
    p = fact;   //把fact函数地址赋给p 
    printf("%d",p(5));  


    /**
    *   指针数组和数组指针 
    */



}

猜你喜欢

转载自blog.csdn.net/alearn_/article/details/80315742