C语言指针详解

一、运算符&

scanf("%d",&i);

  • &:获得变量的地址,它的操作数必须是变量。
  • &后面不能是没有地址的东西,比如&(i++) ,&(i+p)等这些后面代表式的东西。
  • C语言的变量是放在内存里的,比如int类型的变量在32位的系统中占4个字节,它放在内存中的某个位置,那么它放在内存中就需要有地址。

我们可以输出一下i的地址;

int i=0;

printf("%p\n",&i);16位进制输出

二、指针

  • 保存地址的变量

int i=0;

int* p = &i;    //int* 指的是p是一个int类型的指针,这个指针指向i的地址

int* p,q;  //p是一个int类型的指针,q是一个int类型的变量  

int *p,q;  //和上面的意思一样

三、指针变量

  • 变量的值就是内存的地址。
  • 普通变量的值就是实际的值,而指针变量的值就是具有实际值的变量的地址,比如上面的p就是变量i的地址。

访问那个地址上的变量*

  • *是一个单目运算符,用来访问指针的值所指向的那个地址的变量
  • *可以做左值也可以做右值
    • int k = *p;
    • *p = k+1;
    • 我们可以知道*p就是所指地址的值,这个值可以做运算。

函数调用时用指针带回值

char ac[] ={1,2,3,4};

sizeof(char)=1, sizeof(int)=4

int ai[] = {1,2,3,4};

char *p = ac;

p++; //加1

int *q = ai;

q++; //加4

const 在指针中的作用

int a = 6;

const int *p = a; //不能通过指针对变量的值进行修改,即 *p = 2报错;

int const *p = a; //和上面的情况一样

int * const p = a; //指针p指向a的事实不能改变,即不能改变指针指向其他变量

//简言之,就是看const在*的前面还是后面

*p++; //就是取出p所指的那个数据来,完事之后将p移到下一个位置,一般用于数组。

指针的比较

<,<=,==,>=,>,!=; 

0地址

0地址不能随便碰,一般用NULL来表示0地址。

四、用指针来做什么

  • 需要传入较大的数据时用作参数
  • 传入参数后对数做操作
  • 用函数返回不止一个结果,用指针带回值
  • 动态申请内存

动态内存分配

#include<stdlib.h> //使用malloc必须加这个

  • int *a  = (int *)malloc(n*sizeof(int)); //c99之前用malloc来动态分配内存,malloc默认返回的是void*,需要强制类型转换为int*
  • free(a); //释放内存,用完必须释放

在32位和64位系统中malloc最大能申请的内存不一样,如果malloc 内存申请失败会返回0

 

 

纸上得来终觉浅,绝知此事要躬行。加油!!!!

 

乖乖待在家学习,走亲戚就算了,武汉加油!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值