061 函数定义 声明 和调用
函数调用需要大量出入栈的开销
062 函数的参数
063 预处理 内存分区
使用:: 获取外部全局变量的值data=10
// 测试静态局部变量
void fun04() {
static int num = 10;
num++;
cout<<"num="<<num<<endl;
}
int main(int argc,char *argv[])
{
fun04();
fun04();
fun04();
fun04();
fun04();
return 0;
}
在当前源文件用,可以有效避免命名冲突
宏只是预处理阶段的一个替换,所以没有类型,不需要开辟空间
065 指针
int (*p) 缩略写为int *p
#include <iostream>
using namespace std;
void test01() {
cout<<sizeof(char *)<<endl;
cout<<sizeof(short *)<<endl;
cout<<sizeof(int *)<<endl;
cout<<sizeof(long *)<<endl;
cout<<sizeof(float *)<<endl;
cout<<sizeof(double *)<<endl;
cout<<sizeof(int ***)<<endl;
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
066 指针变量的类型
使用Qt指针不初始化,则会输出一个随机值;其他编译器直接报错
下面的例子就说明了不要操作指向NULL的指针变量!!!
067 指针变量指向类型
不要直接对void *p的指针取*
068 数组元素的指针
069 字符串与指针
64位机器是8字节 32位机器是4字节
070 指针数组
void test03() {
int num1 = 10;
int num2 = 20;
int num3 = 30;
int num4 = 40;
int *arr[4] = {&num1,&num2,&num3,&num4};
// 开始遍历指针数组
for(int i = 0 ; i < 4 ; i++) {
cout<<*arr[i]<<" ";
}
cout<<endl;
}
int main(int argc,char *argv[])
{
test03();
return 0;
}
运行结果为
071 数组指针
以下的语句是建立了联系
073 数组作为函数的参数
void setNumber(int* data) {
*data = 100;
}
void test04() {
int num = 0;
setNumber(&num);
cout<<"num = " <<num <<endl;
}
int main(int argc,char *argv[])
{
test04();
return 0;
}
//void outputArray(int arr[5],int n) {
void outputArray(int *arr,int n) // 第1行 第2行等价
for(int i = 0 ; i < n ; i++) {
cout<<arr[i]<< " " ;
}
cout<<endl;
}
void test05() {
int arr[5] = {10,20,30,40,50};
outputArray(arr,5);
}
int main(int argc,char *argv[])
{
test05();
return 0;
}
074 函数指针作为函数的参数
data函数调用后 就被释放了,所以p就拿不到这个地址,也不可能输出
需要改成静态static的
int myAdd(int x,int y) {
return x + y;
}
void test06() {
int (*p)(int,int) = NULL;
//函数指针 和 函数入口地址建立关系
p = myAdd;
// 通过p调用myAdd函数
cout<<p(10,20)<<endl;// 30
}
int main(int argc,char *argv[])
{
test06();
return 0;
}