c++(1)

指针小知识: 
1. 
int a = 10; 
const int *p = &a; //表示一个p为一个指向常量的指针,不能通过 *p = 20;来重新赋值;

2. 
int a = 10; 
int b = 11; 
int *const p = &a;//表示p为一个指针常量,不能修改p指向的地址,即p = &b语法错误。

3.指针函数 
int (* p)(int , char *) 
表示一个指向函数的指针,其中该函数的参数一个为int型,一个为char * 型,返回值为int型; 
如:

int add(int a,int b){
    return a + b;
}

int main(){
    int (*p)(int,int);//定义一个函数指针
     p = add;//让指针p指向函数add。
     int sum = p(5,6);
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4.函数 
void * p(int,char *) 
表示一个函数,其中该函数一个参数为int型,一个为char 型,返回值类型为void 

6.指针函数 
int * ( * p)(int ,char *); 
表示一个指向函数的指针,其中该函数一个参数为int型,一个参数为char 型,返回值类型为int 型;

7.回调函数

int add(int a,int b){ //定义一个加法函数
    return a + b;
}

int fun(int (*p)(int ,int ), int a ,int b){ //定一个函数,第一个参数为函数指针,
    return p(a,b);
}

int main(){
        int (*p)(int ,int);
        p = add();
        int sum = fun(p,4,5);
        return 0;
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

8:数组和指针的不同点 
int array[100] = {0}; 
int *p = array;

此时sizeof(array) 的值为 400,而sizeof(p)的值为4;p能进行自增操作,而array不能进行自增操作。

9.static 关键字 
用于声明一个静态变量,静态变量只初始化一次,而且程序运行期间,静态变量一直存在。

10.register关键字 
如果寄存器空闲(也就是说寄存器非空闲时,还是申请普通变量),那么就把这个变量存到寄存器里面使用,提高效率。注意:用register修饰的变量不能使用指针指向该变量地址了。 
eg:register int a = 10; 
int *p = & a; //错误语法

11.动态创建数组 
//语法错误

 int i = 0;
 scanf("%d",&i);
 int array[i];//在栈中创建一个数组
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

//正确语法

int i = 0;
scanf("%d",&i);
int *p = (int *)malloc(sizeof(int) * i);//,在堆中创建一个数组,用完记得free掉
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

12.静态区、代码区、堆区、栈区 
静态区:全局变量或者被static修饰的变量 
代码区:函数 
堆区:需要手动释放内存。 
栈区:一般是固定大小,申请的变量会自动释放内存。

13.C和C++中三目运算符的区别 
int a = 10; 
int b =11; 
(a < b ? a : b) = 10; 
在C中,三目运算符返回的是变量的值,不能作为左值;在C++中三目运算符返回的是变量本身; 
因此在C中上述表达式不合法,在C++中上述表达式是合法的。但在C中如何达到C++中一样的效果呢? 
*(a < b ? &a : &b) = 10;

14.C中的const 和C++中const的不同 
C语言中const变量是一个制度变量,但是有自己的存储空间,因此可以通过指针来修改其值。 
C++编译器是通过符号表机制(即:键值对)来存储const修饰的变量,虽然为const可能(也可能不会)分配了常量空间,但是不会使用其存储空间的值。 
会分配内存空间的情况(在编译器编译时期就会分配存储空间): 
1当const常量为全局,并且需要在其他文件中使用。 
2.当使用&操作符去const常量的地址时会分配存储空间。

15.const和#define的异同点 
相同点: 
const常量类似于#define宏定义,不能修改值; 
不同点: 
1.const常量是由编译器处理的,提供类型检查和作用域检查,const常量只在代码块中有效,但是宏定义的作用范围是:#define到#undef(没有显示#undef时,则作用范围是文件结尾)。 
2.宏定义是有预处理器单纯的文本替换。

16:struct和class关键字的区别 
在用struct定义类时,所有的成员默认属性为public 
在用class定义类时,所有成员的默认属性为private

17.友元函数 
友元函数打破了封装的特性,使得外部能够访问类内部的私有成员 
,在类中使用关键字friend关键字, 
语法:friend void fun(B *pB,int modify);

然后在全局位置实现这个函数。 
语法:void fun(B *pB,int modify){ 
//todo 

18.运算符重载的限制 
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值