0
点赞
收藏
分享

微信扫一扫

指针复习


如果有一天,你走路要戴耳机,坐车要靠窗,走在路上不会大喊大叫,被问问题会沉默,你会发现安安静静的挺好。。。

----  网易云热评

一、返回栈区地址

int *fun()

{

int a = 10;

return &a; //函数调用完毕,a释放

}


int main(int argc,char *argv[]) {


int* p = NULL;

p = fun();

*p = 100; //操作野指针指向的内存,容易报错



system("pause");

return 0;

}

 

二、返回data区地址

int *fun()

{

static int a = 10; //函数调用完毕,a不释放

return &a;

}

int main(int argc,char *argv[]) {

int* p = NULL;

p = fun();

*p = 100;

printf("p=%d\n", *p);



system("pause");

return 0;

}

 

三、值传递

void fun(int *tmp)

{

tmp = (int *)malloc(sizeof(int));//堆区分配空间,将地址传递给tmp

*tmp = 100;//将堆区的地址里面的值修改为100

}

int main(int argc,char *argv[]) {

int* p = NULL;

fun(p);//值传递,形参修改不会影响实参

printf("p=%d\n",*p);//err,操作空指针指向的内存



system("pause");

return 0;

}

void fun(int *tmp)

{

*tmp = 100;

}

int main(int argc,char *argv[]) {

int* p = NULL;

p = (int*)malloc(sizeof(int));

fun(p);//值传递

printf("p=%d\n",*p);//成功打印



system("pause");

return 0;

}

 

四、返回堆地址

void *fun()

{

int* tmp = NULL;

tmp = (int*)malloc(sizeof(int));

*tmp = 100;

return tmp;//返回堆区地址,函数调用完毕,不释放

}

int main(int argc,char *argv[]) {

int* p = NULL;

p=fun();//值传递

printf("p=%d\n",*p);

if (p != NULL)

{

free(p);

p = NULL;

}



system("pause");

return 0;

}

五、二级指针

void fun(int **tmp)

{

*tmp = (int*)malloc(sizeof(int));

**tmp = 100;

}



int main(int argc,char *argv[]) {

int* p = NULL;

fun(&p);

printf("*p=%d\n", *p);



system("pause");

return 0;

}

 

 

指针复习_静态变量

 

举报

相关推荐

0 条评论