巴拉巴拉~~~哭死,学习啊啊啊啊,学校课好多,只能半夜学了
4.2函数名--特殊的地址:
void fun(int a){ int a=a+1; printf("%d",a); return a; }
指针函数??
void (*p)(int);
p=fun;
注意:函数名一直是放在”=“左边。
考虑:
可以接受信息(几个?每个都是什么类型?)
可以返回信息(返回1个信息,什么类型)
typedef:利于阅读
1、第一个用法
int len_t; //len_t是int数据类型的变量
typedef int len_t ; //len_t 是int数据类型的别名
2、第二个用法
#ifdef C64 typedef unsigned int u32; #else typedef undigned long u32; #endif
这段代码是用来定义一个在C语言中使用的无符号整数类型u32。其目的是让代码在特定的编译环境中(C64)使用unsigned int,而在其他编译环境中使用unsigned long。
#ifdef和#else是预处理指令,用于条件编译,它们允许编译器在编译代码之前做出决策,这是C语言的一个特性。#endif标志着预处理指令的结束。
3、第三个用法
首先:
typedef int *p1; p1 abc=NULL;
//typedef int *p1;这行代码定义了一个新的类型p1,它是一个指向int类型的指针。也就是说,p1是一个指针类型,它指向一个整数。
//p1 abc; 这行代码声明了一个名为abc的变量,其类型为p1,即abc是一个指向int的指针。
//注意指针初始化防止出现包括程序崩溃或数据损坏。
4、区别(typedef和struct)
表现在如何定义方面:
4.3函数承上启下的作用
函数如何获取信息:
- 从调用者处拷贝到函数空间
巴拉巴拉1:交换两个数
- 值拷贝(改变不了) 2.地址拷贝(可以改变)
#include<stdio.h> void change_1(int a1, int b1) { int temp; temp = a1; a1 = b1; b1 = temp; printf("1:a1=%d,b1=%d\n", a1, b1); } void change_2(int *a2,int *b2){ int temp; temp=*a2; *a2=*b2; *b2=temp; printf("2:a2=%d,b2=%d\n", *a2, *b2); } int main() { int a = 3; int b = 4; change_1(a, b); printf("1:a=%d,b=%d\n", a, b); change_2(&a,&b); printf("2:a=%d,b=%d\n", a,b); return 0; }
证明了:如何通过函数改变函数外部某变量的值,通过指针
24.4.13 周六
传递地址的含义(节省空间)
反向更新*
连续空间的查看
- 修改连续空间的值
第一个理解:
#include<stdio.h> void fun(int** p) { *p = 11111; } int main() { int* a; fun(&a); //fun的功能是改变改变地址 //需要先写出函数传递的东西&a,然后再通过定义的int*a把函数写出来。 printf("%d", a); return 0; }
重审:需要先写出函数传递的东西&a,然后再通过定义的int*a把函数写出来。
第二个理解:
scanf("%d",&a);
第三个理解:
//也是实现反向更新 int fun(struct a *date) { date->q=222; //通过地址反向更新某值 } struct a { int q; int p; int x; }; int main() { struct a luck; fun(&luck); }
传递地址的目的:看、改
巴拉巴拉2:写一个strcpy函数声明
即:从一个地址,拷贝到目标地点
先写写试试呗: