c语言指针初探

天大地大妈咪最大 提交于 2020-01-28 17:15:52

与c语言指针相关联的三个符号,一个是地址符&,一个是间接符号*,还有一个是在声明指针时用到的*符号。
那么什么是指针呢?指针时存储变量地址的变量,不是整型,它就像int,float一样是指针类型。

p=&i;     //p存储的是变量i在内存中的地址
i=*p;     //*符号加在指针p前,表示取的是这个地址上的变量值
printf("%p",p);   //打印指针使用%p

例子:定义一个函数用于交换两个变量的值

#include<stdio.h>
void interchange(int,int);
int main(void)
{
    int a=5;
    int b=3;
    printf("交换前a=%d,b=%d.\n",a,b);
    interchange(a,b);
    printf("交换后a=%d,b=%d.\n",a,b);
    return 0;
}

void interchange(int a,int b)
{
    int temp;
    temp=b;
    b=a;
    a=temp;
}

程序运行的结果
在这里插入图片描述
因为函数内的变量是局部变量,只存在于函数内部,函数interchange里的ab虽然交换了,但这里的ab和主函数的ab没有关联,它们在内存中的地址都不一样,是完全不同的变量。那如果要交换值怎么操作呢?答案就是传变量的地址进去。

#include<stdio.h>
void interchange(int * a,int * b);  //声明函数
int main(void)
{
    int a=5;
    int b=3;
    printf("交换前a=%d,b=%d.\n",a,b);
    interchange(&a,&b);          //传的不是变量的值,而是变量的地址
    printf("交换后a=%d,b=%d.\n",a,b);
    return 0;
}

void interchange(int * a,int * b)  //函数定义,参数是两个指针,*和指针之间有空格
{
    int temp;
    temp=*b;     //传的是指针地址上的值
    *b=*a;       //取值*和指针之间不留空格,以区别声明
    *a=temp;
}

在这里插入图片描述
这个程序用到了指针的声明。

int * i;
double * d;    //指针声明要指明类型,*说明d是指针类型,这句表诉就是声明一个指向double类型的指针d

这里容易弄混淆的是声明使用的*
和取指针地址上变量的值*
一般为了区分,声明用的*和指针中间空格,
而通过地址取值*和变量之间不空格,留不留空格不是强制的,只是为了进行区分。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!