c/c++基础

2 篇文章 0 订阅

C++ main函数的参数

C++的main函数可以没有输入参数,也可以有输入参数,而且只能有两个参数,习惯上coding如下:

 int main(int argc, char* argv[]) 或者 int main(int argc, char** argv)

argc :表示传入main函数的数组元素个数,为int类型,
argv :表示传入main函数的指针数组,为char**类型。

//test project
#include <iostream>

int main(int argc, char** argv) {
    for(int i=0;i<argc;i++)
        std::cout << argv[i] << std::endl;
    return 0;
}

执行:

test eee ffff

输出:

/Users/moyao/CLionProjects/test/cmake-build-debug/test
eee
ffff

char** 和char *a[]

char  *s ; 
s = "mgchen";   //此处为什么可以把一个字符串常量赋值给一个指针呢??
**原因就是,字符串常量在编译器中是把它看做一个地址。s这个指针也保存字符串的首地址"m",s[1]"g"地址**

char *a[]  表示一个数组,数组中的元素才是char * (即元素是指向char类型的指针)char **s   为一个二级指针,s中保存的是一级指针char *的地址。可以这么来理解char *(*s),我定义一个指针s,但是我指针s保存的不是传统某个变量的地址,而是保存的是一个char * 指针的地址。(把char理解为a,char *理解为b,char**理解为c。那么b的值是a的地址,然而c的值又为b的地址)

C++在指定内存构造对象

class Person {
private:
  int age;
  std::string name;
public:
  // methods
};
 
int main(int argc, char** argv) {
 
  char mem[sizeof(Person)]; // 或者 auto mem = malloc(sizeof(Person));
 
  auto p = new(mem) Person();
 
  assert((void*)p == (void*)mem); // 两个指针指向同一块内存
 
  return 0;
}

使用new生成对象实际上执行了三个操作:

  1. 调用operator new分配内存
  2. 调用类的构造函数
  3. 返回指针

其中operator new是可重载的,无论全局还是特定类。其函数原型为:

void* operator new(size_t sz);

c的函数定义

void * fun( ) ; //声明一个返回值是任意类型的指针 的函数fun()

void vfun( ) ; //声明一个没有返回值 的函数vfun()

函数指针变量

void (*)( ) 这是一种变量类型。

void void vfun() { //声明一个没有返回值 
}
//声明一个函数指针变量pfun
//也可写成void (*pFunction)(void)
//也可以使用typedef void (*pfun)();
void (*pfun)(); 
pfun = vfun; //该类型函数就是void vfun() 这种类型

//对于一个给定的entry地址
entry = &fun;
//把它转换成为函数指针
(void (*) (void))entry;
//调用
((void (*) (void))(entry))();

C++ 创建对象的三种方式

#include <iostream> 
using namespace std; 
class A 
{ 
private: 
    int n; 
public: 
    A(int m):n(m) 
    { } 
    ~A(){} 
}; 
int main() 
{ 
    A a(1);  //栈中分配 
    A b = A(1);  //栈中分配 
    //第一种和第二种没什么区别,一个隐式调用,一个显式调用
    A* c = new A(1);  //堆中分配 
    //栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放
  delete c; 
    return 0; 
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值