标签:全局变量 文件 class 指针 自己的 std 不同 处理 char s
前言:前一段时间,看了一本剑指offer书籍及程序员面试秘笈
1、不使用任何中间变量如何将a,b的值进行交换
#include <stdio.h>
void swap1(int& a, int& b)
{
int temp = a; //使用局部变量temp完成交换
a = b;
b = temp;
};
void swap2(int& a, int& b)
{
a = a + b; //使用加减运算完成交换
b = a - b;
a = a - b;
};
void swap3(int& a, int& b)
{
a ^= b; //使用异或运算完成交换
b ^= a;
a ^= b;
};
int main(void)
{
int a1 = 1,b1 = 2;
int a2 = 3,b2 = 4;
int a3 = 5,b3 = 6;
int a = 2147483647,b = 1;
swap1(a1, b1);
swap2(a2, b2);
swap3(a3, b3);
printf("after swap ... \n");
printf("a1 = %d, b1 = %d\n", a1, b1); //测试使用临时变量进行交换的版本
printf("a2 = %d, b2 = %d\n", a2, b2); //测试使用加减运算进行交换的版本
printf("a3 = %d, b3 = %d\n", a3, b3); //测试使用异或运算进行交换的版本
swap2(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
执行结果:
after swap ...
a1 = 2, b1 = 1;
a1 = 4, b1 = 3;
a1 = 6, b1 = 5;
a1 = 1, b1 = 2147483647
2、c++和c有什么不同
c++是面向对象的语言;它将数据结构和算法看成一个整体叫做算法,可以理解为:对象=数据结构+算法,程序=对象+对象+...
c是面向过程的语言;它核心是功能分解、自顶向下、逐层分解,可理解为:程序=数据结构+算法
3、如何理解c++是面向对象化的,而c是面向过程化的
c是面向过程化的,但是c++不是完全面向对象化的。在c++中也完全可以写出与c一样的过程化的程序,所以只能说c++拥有面向对象的特性。java是真正面向对象化的
4、#include <head.h>和#include "head.h"有什么区别
尖括号<>表明这个文件是一个工程或标准头文件
双引号""是由用户自己写的头文件
5、预处理的使用
#if 0 #endif
#define DEBUG #ifdef DEBUG #endif
6、用#define实现宏并求最大值和最小值
#define MAX(x, y) (((x) > (y))? (x) : (y))
#define MIN(x, y) (((x) < (y))? (x) : (y))
7、用宏得到一个字的高位和低位字节
#define WORD_LO(xxx) ((byte) ((word)(xxx) & 255))
#define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8))
//一个字由两个字节组成。WORD_LO(xxx)取参数xxx的低8位,WORD_HI(xxx)取参数xxx的高8位
8、用宏得到一个数组所含的元素个数
#define ARR_SIZE(a) ( sizeof((a)) / sizeof((a[0])) )
9、const的使用--找出下面代码中有错的地方
#include <stdio.h>
int main()
{
const int x = 1;
int b = 10;
int c = 20;
const int* a1 = &b; // const 修饰指针指向的内容
int* const a2 = &b; // const 修饰指针本身
const int* const a3 = &b; //const 不但修饰指针本身,而且还修饰指针指向的内容
x = 2; //错
a1 = &c; //对
*a1 = 1; //错
a2 = &c; //错
*a2 = 1; //对
a3 = &c; //错
*a3 = 1; //错
return 0;
}
10、说明const和#define的特点及区别
#define存在于代码段
const存在于数据段,并在堆栈分配了空间
11、c++中const的使用
1:const用于定义常量:const定义的常量编辑器可以对其进行数据静态类型安全检查(只读)
2:const修斯函数的形式参数,例如:void fun(A a);和void fun(A const &a);后者相对前者提高了效率,如果不叫const可能会改变a的值
12、static有什么作用
1:在函数体内,被声明为静态的变量在这一函数被调用的过程中维持这个值不变
2:在模块内(但在函数体外),被声明为静态的变量可以被模块内所有函数访问,但不能被模块外的其他函数访问,它是个全局变量
3:在模块内,被声明为静态的函数只能被这个模块内的其他函数调用
13、对结构体或类做sizeof运算时要注意并不是简单的将各个成员所占的内存数量相加
计算的时候要考虑字节对齐!!
类型 在32位机器下 在64位机器下
char 1 1
short int 2 2
int 4 4
long int 4 8
long long int 8 8
char* 4 8
float 4 4
double 8 8
14、使用sizeof计算普通变量所占空间大小(结构体、类对象、含有虚函数的类对象)
//在32位机器下
char str[] = "hello";
char *p = str;
int n = 10;
sizeof(str) = ; //6
sizeof(p) = ; //4
sizeof(n) = ; //4
void func(char str[100])
{
sizeof(str) = ; //4
}
void *p = malloc(100);
sizeof(p) = ; //4
15、sizeof和strlen有哪些区别
1:sizeof是操作符,strlen是函数
2:直观的理解为,sizeof是求大小,strlen是求字符串长度
标签:全局变量 文件 class 指针 自己的 std 不同 处理 char s
原文地址:https://www.cnblogs.com/zgjias/p/13372330.html