1、sizeof和strlen有哪些區別?
1.sizeof操作符的結果類型是size_t,它在頭文件中typedef爲unsigned int類型。
該類型保證能容納實現所建立的最大對象的字節大小。
2.sizeof是算符,strlen是函數。
3.sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以”\0”結尾的。
4.數組做sizeof的參數不退化,傳遞給strlen就退化爲指針了。
5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因
6.strlen的結果要在運行的時候才能計算出來,時用來計算字符串的長度,不是類型佔內存的大小。
7.sizeof後如果是類型必須加括弧,如果是變量名可以不加括弧。這是因爲sizeof是個操作符不是個函數。
8.當適用了於一個結構類型時或變量, sizeof 返回實際的大小,
當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸
9.數組作爲參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址
2、使用sizeof計算聯合體的大小
#include
union u
{
double a;
int b;
};
union u2
{
char a[13];
int b;
};
union u3
{
char a[13];
char b;
};
int main()
{
cout<<sizeof(u)<<endl; 8
cout<<sizeof(u2)<<endl; 16
cout<<sizeof(u3)<<endl; 13
return 0;
}
3、#pragma pack的作用 看代碼寫輸出
#include
using namespace std;
#pragma pack(1)
struct test{
char c;
short s1;
short s2;
int i;
};
int main()
{
cout<<sizeof(test)<<endl; 9
return 0;
}
4、用指針賦值 看代碼寫輸出
#include <stdio.h>
int main()
{
char a[] = "hello, world";
char *pstr = a;
printf("%c\n", *(pstr+4)); o
printf("%c\n", pstr[4]); o
printf("%c\n", a[4]); o
printf("%c\n", *(a+4)); o
*(pstr+4) += 1;
printf("%s\n", a); p
return 0;
}
5、指針加減操作 看代碼,寫輸出
#include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d\n", *(a+1)); 2
printf("%d\n", *(ptr-1)); 5
return 0;
}