C概念及数组指针

2016-12-15  本文已影响0人  追風

一,运算符优先级


二,数组地址分析


三,数组定义及初始化

int arr[5];
arr[4] = {1};      //未声明,若赋值则arr[4] = 1;
arr[5] = {1,2,5};//数组越界并且未声明

四,指针表示形式及初始化

int *p = NULL; //OK,NULL空地址,是一个宏
int a = 3;
int *p = &a; //OK
int a = 3;
int *p;
p = &a; //OK
int *p;
*p = &a; //ERROR

五,地址间接取值并对其运算

int *p = NULL;
printf("p = %p\n", p); //输出 p = (nil)
printf("*p = %d", *p); //ERROR,空地址不能访问里面的值
int *p = 10; //不能将常量直接赋值给指针
printf("p = %p\n", p); //输出0xa
printf("*p = %d\n", *p); //内存中并未分派0xa这块内存
int a = 3;
int *pa = &a;
int *pc = pa; //同类型指针可以直接转换
char *pd = (char *)pa; //不强制转换会有警告 

六,指针的类型和指针所指向的类型


七,数组和指针

1,数组元素访问形式

int arr[5] = {1,2,3,4,5};
int *pa = arr;
arr[0];
*(arr);
*(pa);
pa[0];

2,野指针


3,指针地址运算


4,概念区分
int buf[3]; //数组,其大小为3,存放三个int常量 int *pb; //指针,其类型为int *型 int *arr[3]; //指针数组 int (*pa)[3]; //数组指针,又称行指针

上一篇 下一篇

猜你喜欢

热点阅读