C++ Day2-3 循环、表达式、函数

本文深入探讨了C++中的函数调用机制,包括按值传递与按地址传递的区别,以及数组作为函数参数的处理方式。同时,文章解析了数组与指针之间的联系和区别,如一维和二维数组的使用,函数地址的正确声明方法,和结构体的传递机制。
  1. *++pt = pt[1]
  2. 二维数组 int maxtemps[4][5];
  3. || OR
  4. 5>3? cout<-“yes” : cout<-“no”
  5. switch () {case : case: … defaule:}
  6. 函数 按值传递(标准函数)
    int main() {
    func_byvalue(5);
    /*
    00781928 push 5
    0078192A call func_byvalue (0781398h)
    0078192F add esp,4 ;返回地址出来
    */
    }

int func_byvalue(int value) {
std::cout << value;
return value;
}
/*
00781770 push ebp
00781771 mov ebp,esp
00781773 sub esp,0C0h
00781779 push ebx
0078177A push esi
0078177B push edi
………………………………
007817B4 pop edi
007817B5 pop esi
007817B6 pop ebx
007817B7 add esp,0C0h
007817BD cmp ebp,esp
007817BF call __RTC_CheckEsp (0781226h)
007817C4 mov esp,ebp
007817C6 pop ebp
007817C7 ret
*/

  1. 函数 按地址传递(标准函数)
    int test[] = { 1,2,3,4,5 };
    00AB1932 mov dword ptr [test],1
    00AB1939 mov dword ptr [ebp-18h],2
    00AB1940 mov dword ptr [ebp-14h],3
    00AB1947 mov dword ptr [ebp-10h],4
    00AB194E mov dword ptr [ebp-0Ch],5
    func_byvalue(test);
    ***00AB1955 lea eax,[test]
    ***00AB1958 push eax
    ***00AB1959 call func_byvalue (0AB139Dh)
    00AB195E add esp,4
  2. 在C++中,当且仅当在函数头时 int arr[] = int *arr
    所以当在主程序调用时,sizeof arr是数组所占空间,而在int sum_arr(int arr[])中,sizeof arr是arr这个指针所占的空间
  3. 在定义数组函数的时候,不要用int sum(int arr[size]), 而是有两种定义风格:
    (1) int sum(int arr[], size)
    (2) int sum(int *arr_begin, *arr_end)
  4. 保护地址参数数值不被修改:在函数头定义时用 void func(const int arr[], int n); ←仅为编译器级别(asm还可以改,但后续代码可能出错(编译器把所有该值写入固定值))
  5. 数组指针vs指针数组
    int *p1[10] → []优先级比*高→(int *) (p1[10]) →一个数组,其包含10 个指向int 类型数据的指针
    int (*p1)[10] → 一个指针,指向一个匿名的有10个元素的int数组
  6. 二维数组做参数:
    int data[3][4]
    int func(int (* data)[4], int size)
  7. 结构的按值传递:本质上是把所有的结构都push进去
  8. 函数地址:不加括号,声明时应该声明该函数的所有细节
    例: double prototype(int s);
    函数指针定义: double (*pf) (int s); ←*的优先级低,所以一定要用括号括起来。否则是一个指向函数的指针
    typedef简化(略)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值