一些新手小疑点,总是不知道,望前辈们多多指点啊多谢
一些新手小问题,总是不知道,望前辈们多多指点啊,谢谢!
函数指针:
1.定义:typedef void (F1)(int p1, int p2)
typedef void (*F2)(int p1, int p2)
test (int p1, int p2);
F1 * fp1;
F2 fp2;
F1 fp3;
问: 语句
fp3 = test;
fp2 = test;
fp1 = test
是否成立?
答案:第一条语句有错,其余两天语句正确。
麻烦大家能帮我一条一条解释一下。多谢。
2.struct struct_A{
int a;
char b;
int c;
short d;
}
struct struct_B{
int a;
char b;
short c;
int d;
}
struct_A a;
struct _B b;
问:sizeof(struct_A a) = ?
sizeof(struct_A b) = ?
答案:sizeof(a) 为16,sizeof(struct_A b)为12
为什么???
先谢谢了
------解决方案--------------------
1. test (int p1, int p2);返回类型是?
2.字节对齐的问题。struct_A占16个字节,int a 占4个,char b分配1个但是占4个,int c占4个,short d分配1个但是也占4ge。
struct_B占12个,int a占4个,char b和short c各分配1个,但是不足4个,所以共占4个,int d占4个,共总12个。
虽然sizeof的之前对b做了类型转换struct_A,但是只是对齐方式变了,类型所占内存并没有变化。
------解决方案--------------------
1 F1 fp3; 不是指针
2 如上楼所说 找内存对齐的帖子去看~~~
内存对齐以及cache line 关系到程序的移植性 以及运算效率 还是需要了解下的~
函数指针:
1.定义:typedef void (F1)(int p1, int p2)
typedef void (*F2)(int p1, int p2)
test (int p1, int p2);
F1 * fp1;
F2 fp2;
F1 fp3;
问: 语句
fp3 = test;
fp2 = test;
fp1 = test
是否成立?
答案:第一条语句有错,其余两天语句正确。
麻烦大家能帮我一条一条解释一下。多谢。
2.struct struct_A{
int a;
char b;
int c;
short d;
}
struct struct_B{
int a;
char b;
short c;
int d;
}
struct_A a;
struct _B b;
问:sizeof(struct_A a) = ?
sizeof(struct_A b) = ?
答案:sizeof(a) 为16,sizeof(struct_A b)为12
为什么???
先谢谢了
------解决方案--------------------
1. test (int p1, int p2);返回类型是?
2.字节对齐的问题。struct_A占16个字节,int a 占4个,char b分配1个但是占4个,int c占4个,short d分配1个但是也占4ge。
struct_B占12个,int a占4个,char b和short c各分配1个,但是不足4个,所以共占4个,int d占4个,共总12个。
虽然sizeof的之前对b做了类型转换struct_A,但是只是对齐方式变了,类型所占内存并没有变化。
------解决方案--------------------
1 F1 fp3; 不是指针
2 如上楼所说 找内存对齐的帖子去看~~~
内存对齐以及cache line 关系到程序的移植性 以及运算效率 还是需要了解下的~