与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
这里容易弄混淆的是声明使用的*
和取指针地址上变量的值*
一般为了区分,声明用的*和指针中间空格,
而通过地址取值*和变量之间不空格,留不留空格不是强制的,只是为了进行区分。
来源:CSDN
作者:weixin_46025444
链接:https://blog.csdn.net/weixin_46025444/article/details/103850223