指针1

什么是指针?

1、指针就是变量,用来存放地址的变量。指针大小在32位平台上是4个字节,在64位平台上是8位字节。

#include <stdio.h>

int main()
{
    int a=10;//在内存中开辟一块空间
    int * p=&a;//取出a的地址,存在p中,p就是一个指针变量。
    return 0;
}

指针和指针类型

指针类型的大小都是4个字节,那么指针类型有什么意义呢?

1、指针类型决定了,指针解引用的权限有多大。例如int类型可以访问4个字节,char类型可以访问1个字节。

2、指针类型决定了,指针走一步,步长是多大。例如int类型走一步加4;char类型走一步加1。

野指针

什么是野指针?野指针就是指针指向的位置不可知的指针。

成因

1、指针没有初始化。

#include <stdio.h>

int main()
{
    int* p;//局部变量未初始化,存放随机值
    *p=20;//非法访问内存
    return 0;
}

2、指针越界访问。

#include <stdio.h>
 
int main()
{
    int arr[10]={0};
    int* p=arr;
    for(int i=0; i<=10; i++)
    {
        *p=i;
        p++;
    }
    return 0;
}

3、指针指向的空间释放。

如何避免野指针

1、指针初始化。

2、小心指针越界。

3、指针指向的空间释放后,即使指向NULL。

4、指针使用之前检查指针有效性。例如判断指针是否是空指针,不是在使用,否则不使用。

指针运算

指针+-整数。

指针的关系运算(+、-)。

#define N_VALUES 5

int mian()
{
    float values[N_VALUES];
    float *VP;
    for(VP=&values[0]; VP<&values[N_VALUES])
    {
        *VP++=0;
    }
}

指针-指针。

#include <stdio.h>

int main()
{
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    printf("%d",&arr[9]-&arr[0]);
    return 0;
}

上面代码的结果是9,指针-指针得到的是两个指针之间的元素个数。所以指针和指针相减时,两个指针必须指向同一个空间。 用指针-指针模拟string函数。

int my_strlen(char *s)
{
    char *p=s;
    while(*p!='\0')
        p++;
    return p-s;
}
全部评论

相关推荐

算法丰川祥:实际就两个人给他投,它这么说好显得自己比较抢手
点赞 评论 收藏
分享
菠落蜜:这个是系统自动投的,不是hr主动打招呼。更抽象的还有ai回复
我的秋招日记
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务