欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于c语言指针的一些认识

程序员文章站 2024-03-07 20:09:51
...

目录

 

指针的初始化

指针的赋值

指针的应用场景


 

指针的初始化

          初始化的目的是让指针知道指向哪个地址,以防止其指向一些“危险”地址。其方法有两种。

          第一:在声明指针的时候告知变量的地址。例如

int i=1;
int *p=&i;

                 第二:不初始化指针,在后直接将地址赋值给指针。例如

int i=1;
int *p;
p=&i;

       但要注意,如下写法是错误的。

int i=1;
int *p;
*p=&i;

              如此做会把i的地址值(一个确切的数值)保存到*p指针所指向的那个地址储存的变量里面,但由于*p并没有初始化,这          个&i的值会被写入一个未知的地方,可能造成危险导致程序崩溃。此时编译器(dev-c++)也会报错 

   [Warning] assignment makes integer from pointer without a cast

             一般是赋值类型和变量类型不一致所导致的。

指针的赋值

一般有两种情况。

    第一种是把一个地址传给指针,让指针指向一个新的地址。

    第二种是把值赋给指针所指向的地址里保存着的那个变量。

指针的应用场景

一、函数需要返回多个值。

二、需要在函数块外对函数块内的变量进行操作时。一般是传入的参数需要保存结果并传回的情况。

三、通过指针返回一些特殊值(如-1或者0)来表明运算错误。有点抽象,这里通过一段代码来举例。

/*整数的除法,并在分母为0时报错*/
#include<stdio.h>

int division(int a,int b,double *c);

int main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    double *c=0;
    if(division(a,b,&c)){
        printf("%.2lf",c);
    }
    else{
        printf("Wrong!");
    }
}

int division(int a,int b,double *c)
{
    int ret=1;
    if(b!=0){
    *c=a/b;
    }
    else{
    ret = 0;
    }
    
    return ret;
}

这段代码通过控制ret=1或0来表达程序的运行状态。

四、动态内存的申请

五、传入较大数据时用作参数