Julia999 发表于 2019-7-31 20:40:24

指针

本帖最后由 Julia999 于 2019-7-31 20:40 编辑

#include<stdio.h>

int main()
{
      int *p;//p是个变量名字,int *表示该p变量只能存储int类型变量的地址
      int i=10;
      int j;
//j=*p;//错误 野指针
      return 0;
}指针的定义:
地址:内存单元的编号(从0开始的非负整数)
范围:0----FFFFFFFF【0-4G-1】
指针:指针就是地址,地址就是指针
指针变量就是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数


分类:
1.基本类型的指针
2.指针和数组的关系


基本概念:
int i=10;
int *p=&i;//等价于int *p; p=&i;
详解这两部操作:
1)p存放了i的地址,所以我们说p指向了i
2)p和i是完全不同的两个变量,修改其中的任意一个变量不改变另外一个
3)p指向i,*p就是i变量本身。更加形象的说就是所有出现*p的地方都可以换成i


注意:
指针变量也是变量,只不过他存放的不能是内存单元的内容,只能存放内存单元的地址
普通变量前面不能加*
常量和表达式前不能加&


区分:
#include<stdio.h>
void f(int i)
{
      i=100;
}
int main()
{
      int i=9;
      f(i);
      printf("%d:",i);
      return 0;
}上面这个是不能改变i的值的,最后的输出结果仍然是9。因为本质上,这样的操作并不能对i进行修改。
#include<stdio.h>
void f(int *i)//不是定义了一个名字叫做*i的形参,而是定义了一个形参,该形参的名字叫做i,他的类型是int *
{
      *i=100;
}
int main()
{
      int i=9;
      f(&i);
      printf("%d:",i);
      return 0;
}

如何通过被调函数修改主调函数中的普通变量的值
1.实参为相关变量的地址
2.形参为以该变量的类型为类型的指针变量
3.在被调函数中通过 *形参变量名 的方式就可以修改主函数中的变量




指针和数组:
指针和一维数组:
    数组名
          一维数组名是个指针常量
          他存放的是一维数组第一个元素的地址
          他的值不能被改变
          一维数组名指向的是数组的第一个元素
下标和指针的关系:
a<-->&=*(a+1)
#include<stdio.h>

int main()
{
      int a={1,2,3,4,5};
    //a=*(a+3);
      print("%p\n",a+1);
      print("%p\n",a+2);
      print("%d\n",*a+3);//*a+3等价于a+3=4
      return 0;
}
#include<stdio.h>

void Show_Array(int *p,int len)
{
        //p=-1;
        //p就是主函数a
        for(int i=0;i<len;i++)
        {
                printf("%d\n",p);
        }
}
int main()
{
        int a={1,2,3,4,5};
    Show_Array(a,5);//a等价于&a,&a本身就是int *类型
       
        return 0;
}
如果通过被调函数修改主调函数中一维数组的内容【如何界定形参中的两个参数】存放数组首元素的指针变量
存放数组长度的整型变量
#include<stdio.h>

int main()
{
        double *p;
        double x=66.6;
        p=&x;//x占8个字节,1个字节是8位,1个字节一个地址
   
        double arr={1.1,2.2,3.3};
        double *q;
        q=&arr;
        printf("%p\n",q);//%p实际就是十六进制输出
        q=&arr;
        printf("%p\n",q);

        return 0;
}


页: [1]
查看完整版本: 指针