C语言_指针随笔

来源:互联网 发布:太原上知教育 编辑:程序博客网 时间:2024/05/17 06:48

    指针:

  1. 指针就是地址,地址就是指针。
  2. 地址就是内存单元的编号
  3. 指针变量是存放地址的变量(例:int* p,这里的p就是指针变量,用于存放地址)

    指针和指针变量是两个不同的概念:平时也把指针变量间读为指针,也就是说下面示例代码中的p既是我们所说的指针,也是我们所说的指针变量。

    例:

  • 指针里面存放的是100:这句话中,指针就是地址
  • 指针里面存放的是地址:这句话中,指针就是指针变量

 为什么使用指针:

  1. 指针能直接访问硬件(OpenGL显卡绘图)
  2. 快速传递数据(指针表示地址:如change_numbers方法调用,调用方法change_numbers函数的时候传入进去,无法改变main方法中变量的真实值,只有传入地址(也就是指针)才能真正改变main函数中的变量的值)
  3. 返回一个以上的值(返回一个数组或者结构体的指针)
  4. 表示复杂的数据结构
  5. 方便处理字符串
  6. 有点像面向对象


  示例代码:


#include <stdio.h>
void pointertest();
void change_numbers(int a, int b);
void main()

{

    int a = 100;
    int b = 200;
    change_numbers(a, b);//这里传的是int类型的变量值,操作的是change_numbers函数中卫形参开辟出来的地址,不能真实的改变main方法中的a,b的值。
    printf("a = %d \nb = %d \n", a, b);

    change_numbers2(&a, &b);//这样就是直接把a,b在main方法中开辟的地址传过去,是直接操作main函数中a,b所在的地址,能直接改变main函数中a,b的值。

   int i = 10;
    int* p; //指针的声明,这时候会开辟出一块内存,也就是一个地址,但是这块内存中没有存放东西(int*类型)

    
    //C语言中没有String类型,可用指针返回一个字符串
    char* h = "Hello World !";
    printf("array : %s\n", h);


    p = &i;//指针的初始化,为上面开辟出来的内存进行赋值,指向了i这个整数所在的地址
    printf("*p = %d \n", *p);
    *p = 100;//这里的p就是指针(int*类型)(其实它叫指针变量,只是平时我们 习惯性叫它指针),*p指的是p指向的地址中的值(int类型)
    printf("更改*p的值!\n");
    printf("*p = %d \n", *p);
    printf("i = %d \n", i);
    printf("修改i的值!\n");
    i = 50;
    printf("*p = %d \n", *p);
    printf("i = %d \n", i);

}

void change_numbers(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}


void change_numbers2(int* a, int* b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

运行结果:

1 0
原创粉丝点击