C概念及数组指针


一,运算符优先级

  • 括号第一,单目第二,乘除第三,加减第四,位移第五,关系第六,等于不等于第七,位与异或位或八九十,逻辑或和与十二十一,条件高于赋值,逗号运算最低。

二,数组地址分析

  • 举例:
    int arr[5] = {1};
    arr:0x0000
    &arr[0]:0x0000
    &arr:0x0000
    arr+1:0x0004
    &arr[0]+1:0x0004
    &arr+1:0x0014
  • 说明
    arr数组名
    &arr[0]:数组元素的首地址

三,数组定义及初始化

  • 数组需定义并初始化,不能先定义后初始化
int arr[5];
arr[4] = {1};      //未声明,若赋值则arr[4] = 1;
arr[5] = {1,2,5};//数组越界并且未声明
  • 数组初始化
    int arr[5] = {1};
    int arr[4] = {1,2,3,4};
    int arr[3] = {[1] = 2}; //不建议
    int buf[ ] = {1,2,3,4}; //不建议
    int buf[ ] = {}; //ERROR

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

  • 表示形式
    int *p; int* p; //内核代码里见的多 int * p;
  • 指针初始化
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; //不强制转换会有警告 

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

  • 指针的类型:去掉变量名之后的部分
  • 指针所指向的类型:去掉变量名及其前面的*
  • 指针大小:64位机大小为8,32位机大小为4

七,数组和指针

1,数组元素访问形式

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

2,野指针

  • 没有初始化,或者其指向的内存被释放,而指针没有被置空
    int *p; *p +=10; //直接使用会出错
  • 危害:造成系统资源浪费,容易曹诚位置的知名错误

3,指针地址运算

  • 自增:指针向高地址方向移动
  • 自减:指针向低地址方向移动
  • 指针相减表示指针之间的距离,相加没有意义
  • 指针加减一个常量,表示地址向高字节或低地址方向移动

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,848评论 3 44
  • 作业整理; 指针的基本的结构与基础知识整理; 作业讲解:(1) 将2~100之间的素数 保存到数组中,并遍历输出,...
    比莉吉恩阅读 3,017评论 0 0
  • 变量的声明和定义变量声明(declaration) 可以declaration很多次,不占内存空间,例如 exte...
    FlyingReganMian阅读 4,687评论 0 1
  • C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一...
    xx_cc阅读 9,423评论 11 39
  • 我们分手吧。 深夜十二点,我收到张先生发来的微信。确切地说,并不是十二点,而是十一点二十九分。不得不说这真是个尴尬...
    殊言成木阅读 4,622评论 13 5

友情链接更多精彩内容