c语言指针的详细解释

阅读次数: 4,421

  • A+
所属分类:建站

刚接触C,学到了指针这里我很懵圈。百度了很多,感觉上是理解了但还是乱,百度百科里的例子更是无法运行。(最后越查越乱)

最终在无广告的Google下初步理解了

c语言指针的详细解释

c语言指针的详细解释

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

/*
void go_forward(int *position_x,int *position_y){
      *position_x=*position_x+1;
      *position_y=*position_y+1;
      }
int main(){
    int x=0;
    int y=0;
    go_forward(&x,&y);
    printf("当前坐标为:%d,%d \n",x,y);
    return 0;
    } */

    void main(){

        char str = 'A';
        char *p_str;
        //p_str = (char *)2686751;// 2686747
        p_str = (char *)2686747;// 地址变了

        char* *pp_str;
        pp_str = &p_str;

        printf("%c\n",str);// str变量的值
        printf("%p\n",&str);// str变量的地址
        printf("%c\n",*p_str);//引用p_str指针自己变量值所指向地址的 变量值
        printf("%p\n",&p_str);// p_str自己的变量内存地址
        printf("%d\n",p_str); //自己的变量值


        printf("%c\n",**pp_str);
        printf("%d\n",*pp_str);


        // 以上是指针说明
        printf("以上是指针说明 \n");

        // 声明一个普通 指针
        int a = '6';
        int *p_a;
        p_a = &a; //赋值
        printf("%p\n",a);
        printf("%d\n",p_a);
        p_a++;

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

        // 以上是指针++
        printf("以上是指针 \n");


        int array[3] = {11,22,33};
        int *p_array;
        p_array = &array;
        printf("%d\n",array[0]);
        printf("%d\n",&array); // 28ff00
        printf("%d\n",array); // 28ff00
        printf("%d\n",&p_array);
        printf("%d\n",p_array);

        //以上是指针数组初探
        printf("以上是指针数组初探 \n");

        char arr_str[6] = {'a','b','c','d','e','f'};
        char temp;
        int i;
        char *p_arr_start = arr_str;
        char *p_arr_end = arr_str+6-1;
        //当内存地址相等 时 就跳出循环
        while(p_arr_start < p_arr_end){
            temp = *p_arr_start;
            *p_arr_start = *p_arr_end;
            *p_arr_end = temp;
            p_arr_start++;
            p_arr_end--;
        }

        for(i=0;i<6;i++){
            printf("%c\t",arr_str[i]);
        }
        //以上是用指针做的小练习 数组反转
        printf("以上是用指针做的小练习 数组反转\n");

        return 0;


    }

刚开始理解先到这里以后用的多了应该会有其他新的知识(如函数指针,指针函数,因为还没学到函数所以这里就先不探讨了)

2019-02-25 继续之整型指针的全局变量引用

直接上例子:

目的是在代码的任何地方都可以调用到这个变量

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define   N 4 /*根据字符串的长度排序,由长到短*/

void sort(char *p[N]);

void main() {
 /*
    先用一个字符串 存地址的位置
    再将这个位置作为参数
    得到这个位置的数据
    改变这个位置的数据
    再次获取这个位置的数值
    */

    //测试 i的值会不会变化
//    int *i;
//    printf("指针的地址是%x\n",&i); //  28ff1c
    int *p;
    p = 3;
    printf("指针的地址是%#08x\n",&p);
    int addr = &p;
    printf("字符串是%#08x\n",addr);
    printf("字符串是%d\n",*(int *)addr);
    int num;
    for(num =0 ;num<3;num++){
      test(addr);
    }

    //打印 使用 test方法之后  他的值是多少
    printf("test之后字符串是%d\n",*(int *)addr);

}

void test(int addr){
    //把a的指针也指向 *i;
    int num;

    num = *(int *)addr;
    num++;
    *(int *)addr = num;
    printf("addr的值是%d\n",*(int *)addr);
    printf("addr的值是%d\n",num);


}

 

来自时刻需

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: