关于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来表达程序的运行状态。
四、动态内存的申请
五、传入较大数据时用作参数
上一篇: c语言 scanf 的一些认识和总结