1.
struct node
{
char a[10];
int b;
} p[4];
A p->b=2 B p[0].a="abc" (把字符串赋给地址) C p[0]->b=2 D p->a='b'
正确:p[0].b=1;
错误:p.b=1; B和D一样错误
可以char a[10]="bbb" 但不能 char a[10]; a="bbb"; (a为数组地址)
2.
int a,b;
b=sizeof(a);
在编译阶段就完成了
但int a, b, c=9 a=b=c; 不是在编译时确定
3.
![本地图片,请重新上传]()

b是指针,地址不确定, 若改为: printf("%0x\n",&(p.b)); 输出为:12ff74
结构体和输出一样,所有元素一起分配,而不是一个一个入栈。 在栈里面顺序;a->b->c->d 地址:低-> 高
5.

struct node
{
char a[10];
int b;
} p[4];
A p->b=2 B p[0].a="abc" (把字符串赋给地址) C p[0]->b=2 D p->a='b'
正确:p[0].b=1;
错误:p.b=1; B和D一样错误
可以char a[10]="bbb" 但不能 char a[10]; a="bbb"; (a为数组地址)
2.
int a,b;
b=sizeof(a);
在编译阶段就完成了
但int a, b, c=9 a=b=c; 不是在编译时确定
3.
#include <stdio.h>
int main()
{
struct node
{
char a;
char a;
int *b;
int c;
int d;
} p;
printf("%0x\n",&(p.a));
printf("%0x\n",(p.b));
printf("%0x\n",&(p.c));
printf("%0x\n",&(p.d));
} 
b是指针,地址不确定, 若改为: printf("%0x\n",&(p.b)); 输出为:12ff74
结构体和输出一样,所有元素一起分配,而不是一个一个入栈。 在栈里面顺序;a->b->c->d 地址:低-> 高
地址12ff7c是最高地址(不变),若还加入元素,则地址 从12ff70 减少
4.#include <stdio.h>
&a表示整个数组的地址 ,&a + 1表示向后偏移整个数组的长度 + 5(若为int a[10] ={1,2,3} 则+10)
若改为: int *ptr = (int *) ((int *)a+1); 则为: 2 1
若改为:int *ptr = (int *)((int )a+1); 则为一个很大的正整数
4.#include <stdio.h>
int main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf("%d%d\n",*(a+1),*(ptr-1));
}
答案:2 5&a表示整个数组的地址 ,&a + 1表示向后偏移整个数组的长度 + 5(若为int a[10] ={1,2,3} 则+10)
若改为: int *ptr = (int *) ((int *)a+1); 则为: 2 1
若改为:int *ptr = (int *)((int )a+1); 则为一个很大的正整数
若改为:int *ptr = (int *)((int )a+4); 则为:2 1(因为(int)a+4实际上就是多加了一个指针偏移的大小,32位系统中指针占用4字节
5.
#include <stdio.h>
int main()
{
char a[5] = "abcde"; //溢出
printf("%s\n",a);
printf("%c\n",a);
printf("%x\n",a);
printf("%c\n",*a);
}

#include <stdio.h>
int main()
{
int i = 0x12ff78; //注意16进制表示,强制转化为char型,只和最后一个字节(78)有关。
char a = (char)i;
printf("%c\n",a);
} //输出:x