指针变量

地址和指针概念

        地址:在计算机内存中,每个存储单元都有一个唯一的地址,就像我们现实生活中的门牌号码一样。通过这个地址,我们可以找到相应的存储单元,从而访问其中存储的数据。

        指针:指针则是一个特殊的变量,它存储的是内存地址。可以将指针想象成一个箭头,它指向了内存中的某个位置。通过指针,我们可以间接地访问到指针所指向的内存地址中的数据。

指针变量

定义:存放变量地址的变量是指针变量,它用来指向另一个变量。

基类型 * 指针变量名;

  • 整型是用来装整数的数据类型。
  • 指针是用来装地址的数据类型。

指针变量只能存放地址(指针),不能将一个整数或任何其他非地址类型的数据赋给一个指针变量。

&取地址运算符二级自右向左
*指针运算符二级自右向左
int main(void)
{
    int a = 10;
    int *p;
    p = &a;

    printf("%d\n",a);
    printf("%d\n",*p);
    return 0;
}
  • 通过指针变量中的值到内存空间中定位。
  • 从定位处开始向后偏移sizeof(基类型)。
  • 将偏移好的那部分内存空间当作是一个基类型来看。

函数调用时,一般为值传递,因此不能直接访问,需要通过指针来取地址进行间接访问,从而能够在被调函数中修改主调函数。

int main(void)//验证大小端字节序
{
    int i = 1;
    char *p = (char *)&i;//强制类型转换

    if(*p == i)
    {
        printf("little\n");//小端存储
    }
    else
    {
        printf("big\n");
    }
    return 0;
}

数组与指针

数组也可以作为指针,数组传参时本身传递的就是首元素地址。

a[i] <---> *(a + i)

指针数组求和

//指针数组求和
int main(void)
{
    int a[] = {1,2,3,4,5,6,7,8,9,0};
    int len = sizeof(a) / sizeof(a[0]);
    int i;
    int sum = 0;
    int *p = a;
    for(i = 0;i < len;++i)
    {
        sum += *(a + i);
    }
    printf("%d\n",sum);

    return 0;
}

当指针为空指针,指针当前状态为不可访问。int *p; p = NULL;

二分查找

int *binaryFind(int *a,int len, int n)
{
    int begin = 0;
    int end = len - 1;
    while(begin <= end)
    {
        int mid = (begin + end) / 2;
        if(*(a + mid) > n)
        {
            end = mid -1;
        }
        else if(*(a + mid) < n)
        {
            begin = mid + 1;
        }
        else
        {
            return a + mid;
        }
    }
    return NULL;    
}

使用函数递归完成数组遍历

void printArray(int *a, int len)
{
    if(len == 0)
    {
        return;
    }
    else
    {
        printf("%d\n",*a);
        return printArray(a + 1,len - 1);
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值