首页 > 代码库 > 实验十:指针(1)

实验十:指针(1)

地址和指针:地址和指针是计算机中的两个重要概念,在程序运行过程中,变量或者程序代码被存储在以字节为单位组织的存储器中。在C语言中,如果定义了一个变量,在编译时就会根据该变量的类型给它分配相应大小的内存单元。

 

**要注意区分内存单元的内容和内存单元的地址。
        前面学过把地址作为scanf()的输入参数的用法:例如:函数调用scanf(“%d”,&n),把输入的值存储到变量n所在的内存单元里,其中&n表示变量n的内存地址或存储位置。这里的&称为地址运算符,&是一元运算符。

 

指针变量的定义:如果在程序中声明一个变量并使用地址作为该变量的值,那么这个变量就是指针变量。
               定义指针变量的一般形式为:
          类型名      *指针变量名;

          类型名指定指针变量所指向变量的类型,必须是有效的数据类型,如int,float,char等。指针变量名是指针变量的名称,必须是一个合法的标识符。

          定义指针变量要使用指针声明符*。如:int  i,*p;

          在定义指针变量时,除了指针变量名,还需要说明该指针变量所指向的内存空间上所存放数据的类型。

 

**指针声明符*在定义指针变量时被使用,说明被定义的那个变量是指针。

         如果未加声明,把指针和指针变量同等对待,都是指存放内存地址的指针变量

 

**定义多个指针变量时,每一个指针变量前面都必须加上*。
         指针变量的类型指它所指向的变量的数据类型。

         指针变量也要先赋值再使用,指针变量被赋的值应该是地址。

 

**指针p所指向变量的值加1:*p=*p+1
                                         ++*p
                                        (*p)++
                                         *p++等价于*(p++)

 

**说完知识点,来提一提作业,都是写加入指针的自定义函数,不能说难也不是不难,总的来说错误还是挺多的:
    1.计算两数的和与差:

void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
    *psum=op1+op2;
    *pdiff=op1-op2;
}

这个自定义函数还是没有问题的,主要是主函数中 sum_diff(op1,op2,&sum,&diff);看书上这样子写:在函数中调用函数sum_diff()时,将变量sum和diff的地址作为实参,在被调用函数中用形参指针psum和pdiff分别接受地址,并改变了形参所指向变量的值。因此,函数main()中sum和diff的值也随之改变。

 

   2.利用指针找最大值:

唯一不大懂的就是为什么自定义函数中用指针变量而不用指针

void findmax(int *px,int *py,int *pmax)
{
    if(*px<*py)
        *pmax=*py;
    else
        *pmax=*px;
}

这个其实昨天助教老师给了我另一个函数,而我却写错了,内容如下:

void findmax(int x,int y,int *pmax);

这个是函数体...

#include<stdio.h>
void findmax(int x,int y,int *pmax);
int main()
{
    int x,y,*px,*py,max;
    printf("Enter x and y=");
    scanf("%d%d",&x,&y);
    findmax(*px,*py,&max);
    printf("The Max Number Is %d\n",max);
    return 0;    
}
void findmax(int x,int y,int *pmax)
{
    int x,y,max;
    if(x<y)
        max=y;
    else
        max=x;
}

然而这个是有错误的整个函数,其实我还是没有发现错哪了/(ㄒoㄒ)/~~

 

3.拆分实数的整数与小数部分:
函数为void splitfloat (double x, double *intpart, double *fracpart); 

小数部分=number-整数部分,如果弄懂了前面两个题,也不会很难。

 

总结:这章不是很容易,要认真学!!!

实验十:指针(1)