一:内存
void
foo(void) {
char *str1 = "test1"; // test1 这个串位于哪个位置? Q1
char str2[] = "test2";//test2 这个串位于哪个位置? Q2
*str1 = 'a'; //正确否?Why? Q3
*str2 = 'b'; //正确否?Why? Q4
}
A1: test1 位于 文本区(.TEXT)
A2: test2 位于 栈(堆 是 堆,栈 是 栈, 不要混淆)
A3: 不正确,不能修改文本区的数据,Windows会引起Win32异常(访问冲突),Linux会引发segment fatal
A4: 正确,test2 位于栈内,随便你咋修改
PS:不能在栈内分配过大的空间,不然会栈溢出
void
foo() {
int largearray[1000 * 1000]; //溢出
}
int largearray[1000 * 1000]; //不会溢出
void
foo() {
//........
}
另外一个
typedef struct {
int a;
char b;
float c;
}mystruct;
sizeof(mystruct) = ?
一般情况下为 4 + 4 + 4 = 12,字节对齐,感兴趣的GG自己上外网找下
[ 此帖被zhd32在2007-11-07 11:18重新编辑 ]