函数形参从右到左入栈

int add(int count, ...) { // 指针大小与程序位数有关(32位指针是4个字节,64位指针是8个字节) int intSize = sizeof(int*) / sizeof(int); int sum = 0; // cout << &count << endl; int *p = &count + intSize; // cout << p << endl; for (int i = 0; i < count; ++i) { sum += *p; cout << *p << endl; p += intSize; } return sum; } int main() { cout << add(3, 1, 2, 3) << endl; return 0; } 输出:...

December 22, 2021 · 1 min · Rick Cui

指针 + 1

1. 32 位和 64 位程序指针是多少位 32位指针大小为4个字节,64位指针大小位8个字节 2. 指针加 1,是对该指针增加 1 个储存单位 “存储单位”,指的是指针指向的数据类型所占的内存的字节数。不同类型的指针加1后,增加的大小不同。 int main() { int a[] = {1, 2, 3, 4, 5}; // &a是数组指针,其类型为 int (*)[5],a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5]; // &a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) // 但是prt与(&a+1)类型是不一样的(这点很重要,ptr指向的是整形),所以prt-1只会减去sizeof(int) int *ptr = (int*)(&a + 1); cout << *(a + 1) << endl; cout << *(ptr - 1) << endl; return 0; } 输出: 2 5 注: a,&a的地址是一样的,但意思不一样: a是数组首地址,也就是a[0]的地址,a+1是数组下一元素的地址,即a[1] &a是对象(整个数组作为一个对象)首地址,而&a+1是下一个对象的地址,即a[5].

December 22, 2021 · 1 min · Rick Cui

模板类

template<class T> class Test { public: Test(T t){ m_t = t;}; // explicit Test(T t){ m_t = t;}; T getValue(){ return m_t; }; private: T m_t; }; int main() { Test<int> tInt(1); cout << tInt.getValue() << endl; Test<double> tD(1.15); cout << tD.getValue() << endl; Test<float> tF = 1.3f; // 构造函数没有explicit修饰,可以隐式转换 cout << tF.getValue() << endl; return 0; } 输出: Start 1 1.15 1.3 0 Finish

December 22, 2021 · 1 min · Rick Cui

模板函数

template <typename T> inline const T& Max (const T& a, const T& b) { return a < b ? b:a; }; int main() { int i = 39; int j = 20; cout << "Max(i, j): " << Max(i, j) << endl; double f1 = 13.5; double f2 = 20.7; cout << "Max(f1, f2): " << Max(f1, f2) << endl; string s1 = "Hello"; string s2 = "World"; cout << "Max(s1, s2): " << Max(s1, s2) << endl; return 0; } 输出:...

December 22, 2021 · 1 min · Rick Cui

函数指针

#include <iostream>#include <cstdlib>using namespace std; // 声明函数指针变量 int (*fn)(int) = NULL; // 定义函数指针类型 typedef int (*Fn)(int); int cal(int v){ return v; }; int max(int a, int b){ return a > b ? a : b; } // 函数指针做为参数 void proc(int v, Fn f){ cout << f(v) << endl; }; // 函数指针作为函数返回值 int (* retFP(string fName))(int, int){ // lambda 表达式作为函数指针返回 int (*fp)(int,int) = [](int x, int y){ return x > y ?...

December 16, 2021 · 2 min · Rick Cui