1. int a[] = {1,2,3};
printf("%d\n", 2[a]); //a[2]
2. int a[10][20]
i = a[2][3];
i = *(a[2]+3);
i = *(*(a+2)+3);
int (*p)[20] = a;
3. int a[10];
int *p = a;
int *q = &a; //区别
int (*r)[10] = &a;
4. extern char *p;
extern char p[]; //区别
char a[] = "/etc"; /*file1*/
extern char a[]; /*file2*/
char *a = "/etc";
extern char *a;
5. 优先级:
(), [], ->,
.
单目
双目(算术,移位,关系(==, != 比其他关系运算符低),逻辑)
条件(?:)
赋值
逗号
逻辑运算符:& > ^ > | > && > || ;
6. extern int a;
则a 必须在某个地方被定义,可以在其他源文件中,也可以在同一源文件中。
7.
int func(void) [5];
func是一个返回值为具有5个int元素的数组的函数。但C语言的函数返回值不能为数组,这是因为如果允许函数返回值为数组,那么接收这个数组的内容的
东西,也必须是一个数组,但C语言的数组名是一个右值,它不能作为左值来接收另一个数组,因此函数返回值不能为数组。
int func[5](void);
func是一个具有5个元素的数组,这个数组的元素都是函数。这也是非法的,因为数组的元素除了类型必须一样外,每个元素所占用的内存空间也必须相同,显
然函数是无法达到这个要求的,即使函数的类型一样,但函数所占用的空间通常是不相同的。
-----------------------------------------------------------------------------------------------------------
char *d = "123\04567890";
char *e = "123\0'4567890";
阅读(635) | 评论(0) | 转发(0) |