1.strlen与sizeof区别
strlen求长度,到‘\0’结束,是函数。
sizeof求大小,包括‘\0’,只是运算符。
char str[] = {'h','e','l','l','o'};
cout<<strlen(str)<<end;//?为随机,因为str没有初始化,所以不会遇到'\0'
cout<<sizeof(str)<<endl;//5
char str[10] = {'h','e','l','l','o'};
cout<<strlen(str)<<endl;//5,因为初始化过后,‘o’后面全为0,包括全局变量同样如此。
cout<<sizeof(str)<<endl;//10
char str[10] = {'h','e','0','l','l','o'};
cout<<strlen(str)<<endl;//6 当'0'是0时,此长度为2;即'\0' = 0;
cout<<sizeof(str)<<endl;//10
int val = "01234567"[3];//取第三个数,通用写法,这里取得是字符的值,想要变为int,需要(val-‘0’)
void main()
{
char str[10];
for (int i = 0; i < 5; ++i)
{
str[i] = 'a' + i;
}
cout << strlen(str) << endl;//随机值,因为str数组没有初始化
cout << sizeof(str) << endl;//10
}
char str[10];
void main()
{
for (int i = 0; i < 5; ++i)
{
str[i] = 'a' + i;
}
cout << strlen(str) << endl;//5,当生命为全局变量时,自动赋初值为0;
cout << sizeof(str) << endl;//10
}
用变量a给出下面定义
1.一个整型数
int a;
2.一个指向整型数的指针
int *a;
3.一个指向指针的指针,它指向的指针是指向一个整数
int **a;
4.一个有10个整型数的数组
int a[10];
5.一个有10个指针的数组,该指针是指向一个整型数的
int *a[10]
6.一个指向有10个整型数数组的指针
int (*a)[10]
7.一个指向函数的指针,该函数有一个整型参数并返回一个整型
int (*a)(int )
8.一个有10个指针的数组,该指针指向一个函数,
该函数有一个整型参数并返回一个整型数
int (*a[10])(int)
进制转换
二进制
int value;
stack<int> s;
if(value == 0)
{
s.push(0);
}
else
{
while(value)
{
s.push(value%2);
value /= 2;
}
}
while(!s.empty())
{
cout<<st.top();
s.pop();
}
cout<<endl;
十六进制
stack<char >s;
if(value == 0)
{
s.push('0');
}
else
{
int mod;
while(value)
{
s.push("0123456789ABCDEF"[value%16]);
value /= 16;
}
}
while(!s.empty())
{
cout<<s.top();
s.pop();
}
字节对齐
typedef struct test
{
char a;//1 + 7
double b;//8
int c;//4 + 4
//
}Test;
//前要和后对齐,最后结果需要为最大值得倍数。
typedef struct Test
{
short a; //2+6
struct
{
int b; //4 + 4
double c; //8
char d; //1 + 7
};
long e; //4 + 4
}Test;
struct 加名字是类型,不加名字是变量
不能跨类型也不能跨字节
//字节对齐,空间换时间
类型不占大小空间(struct t)