指针2

126 阅读2分钟

「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。

  • 的含义:

    1、乘法
    2、定义指针变量
        int * p;//定义了一个名字叫p的变量,int * 表示p只能存放int变量的地址。
    3、指针运算符
        该运算符放在已经定义好的指针变量的前面
        如果p是一个已经定义好的指针变量
        则 *p表示 以p的内容为地址的变量
        
    
# include<stdio.h>

f(int i,int j)
{
    return 100;
}

void g(int * p, int * q)
{
    *p = 1;
    *q = 2;
}
int main(void)
{
    int a = 3,b = 5;
    
 //  a = f(a,b);
 //  b = f(a,b);
 g(&a,&b);
 printf("%d %d\n",a,b);
 return 0;
}

通过形参不能改变实参的值

如果通过被调函数修改主调函数普通变量的值

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

指针和数组

数组名:
       一堆数组名是个指针常量
       它存放的是一维数组第一个元素的地址
下标和指针的关系
       如果p是个指针变量,则
           p[i]永远等价于*(p+i)
       确定一个一位数组需要两个参数:
         数组第一个元素的地址。
         数组的长度。

image.png

指针变量的运算
       指针变量不能相加  不能相乘  也不能相除
       如果两个指针变量指向的是同一块连续空间中的不同存储单元,则这两个指针变量才可以相减
       
# include<stdio.h>

int main(void)
{
    int i = 5;
    int j = 10;
    int * p = &i;
    int * q = &j;
    int a[5];
    p = &a[1];
    q = &a[4];
    printf("p和q所指向的单元相隔%d个单元\n",q-p);
    return 0;
}

image.png

一个指针变量到底占几个字节:

sizeof(数据类型)
功能:返回值就是该数据类型所占的字节数
    sizeofint) = 4
    sizeofchar) = 1
    sizeofdouble) = 8
    假设p指向char类型变量(1个字节)
    假设q指向int类型变量(4个字节)
    假设r指向double类型变量(8个字节)
    p  q  r本身所占的字节数是一样的
总结:
    一个指针变量,无论它指向的变量占几个字节,该指针变量本身只占4个字节。
    一个变量的地址使用该变量首字节的地址来表示的。