2.12一级指针作为函数形参和返回值

【注:自己从老师讲解出理解的,不对的地方望指正】

【注:本程序验证是使用vs2013版】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)


void fun(int *p){
    p = 0xaabb;
    printf("fun:p= %p\n", p);
}

void fun2(int **temp){
    *temp = 0xbbcc;
    printf("fun2:*temp= %p\n", *temp);
}

int *fun3(int *p){
    p = 0xccdd;
    printf("fun3:p= %p\n", p);
    return p;
}

void get_num1(int src){ src += 1; } void get_num2(int *src){ *src += 1; //通过*操作内存 }

void
get_num3(int **temp,int len){ int i = 0; for (int i = 0; i < len; i++) { *temp = i+1; //temp:代表的是传进来数组的首元素地址, *temp:代表的是首元素的值 temp++; //指针上移一位 } }


int
main(void){ /* 一个变量,应该定义一个什么样类型的指针来保存它的地址 应该在原来的基础上加一个*来保存它的地址 */ int a = 100; int *b = &a; int **c = &b; int *********t1 = NULL; int **********t2 = &t1; /* 1.值传递:形参的修改不会影响到实参 2.地址传递:形参(通过*操作符号)的任何修改会影响到实参。 3.函数返回值:可以通过函数返回值来影响实参,不过一般返回值都作为状态判断使用。 4.地址传递和函数返回值相比的优点:通用性强,更加灵活 */ int *d = 0x1122; printf("d: %p\n", d);   

fun(d);
//这个是值传递,不是地址传递,(除了数组,名字就代表地址)地址传递需要在实参前面加&号 printf("d: %p\n", d);   

fun2(
&d);//地址传递,修改实参,需要加上&符号 printf("d= %p\n", d);   

d
= fun3(d);//通过函数返回值修改实参 printf("d= %p\n", d);   


int e = 10; get_num1(e); //值传递 printf("e= %d\n", e);
   get_num2(
&e);//地址传递 ,需要加上&符号 printf("e= %d\n", e);  
   
  
  int
f[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int length = sizeof(f) / sizeof(f[0]); int i = 0; get_num3(f,length);//数组特殊,不加& 也是传递地址 for (int i = 0; i < length; i++) { printf("f[%d]=%d\n", i,f[i]); }
  
  
printf(
"\n"); system("pause"); return 0; }

 

posted @ 2019-06-25 23:33  大黄蜂_001  阅读(323)  评论(0编辑  收藏  举报