1. sizeof(数组)=数组的长度; sizeof(指向数组的指针)=指针大小4或8
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
int
main(
int
argc,
const
char
* argv[])
{
char
s[] =
"hello world!"
;
char
*t = s;
printf
(
"sizeof(s) is %li \n"
,
sizeof
(s));
printf
(
"sizeof(t) is %li \n"
,
sizeof
(t));
return
0;
}
|
output:
sizeof(s) is 13
sizeof(t) is 8
2. char s[]中的&s等价于s, 同是取char s[]的地址;
而char *t = s中的&t 不等同于 t, 取得是t指针变量本身的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
int
main(
int
argc,
const
char
* argv[])
{
char
s[] =
"hello world!"
;
char
*t = s;
// &s == s; What is the address of the s array?
printf
(
"&s is %p \n"
, &s);
// &t != t; What is the address of the t variable?
printf
(
"&t is %p \n"
, &t);
return
0;
}
|
output:
&s is 0x7fff5fbffa2b
&t is 0x7fff5fbffa20
3. 声明指针, 内存会分配空间, 所以指针可以重新赋值; 而数组变量和数组元素公用地址, 所以如果重新赋值, 则产生编译错误.
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
int
main(
int
argc,
const
char
* argv[])
{
char
s[] =
"hello world!"
;
char
*t = s;
s = t;
// Error: Array type is not assignable
return
0;
}
|