指针的相关知识

1.指针内存:

a.指针变量需要内存空间

b.指针占8个字节的内存空间,和指向的类型没有关系

c.指针变量只保存地址

char name[3]={};
printf("%lu\n",sizeof(name));
运行结果为:24(3*8)
3个元素,每个元素是指针类型

char*name="jack";
printf("%lu\n",sizeof(name));
运行结果:8
(name是指针类型)

2.指针的运算:

当对指针加或者减时,操作的是指针指向的元素占据的内存空间*数量

int a[5]={1,2,3,4,5};
printf("%d\n",a[0]);//访问第一个元素
printf("%d\n",*a);//*(数组的首地址 第一个元素的地址)
运行结果:1
         1
int a[5]={1,10,23,23,99};
a[0]的地址为0x100
*(a+1)=*(0x100+1*4)=*(0x104);

3.数组的访问:

可以用指针访问数组,可以用数组访问指针
a.使用下标访问   a[0]     a[1]
b.使用地址访问  *(a+0)   *(a+1)
int*b     b[1] == *(b+1)
inta[10]  a[1] == *(a+1)


4.数组的内存分配:

a.定义数组时,必须指定元素个数,数组的内容空间由系统分配
不需要我们去释放,系统会释放掉。


5.指针的内存分配:

a.当定义时,只为指针变量分配了8个自己的内存空间(用于存储地址)
b.如果需要存数据,就必须为这个指针变量指向的区域分配内存空间
char*name = NULL;
scanf("%s",name);
printf("%s\n",name);
jack
运行失败:内存错了
改正:j a c k \0需要5个内存空间


6.分配内存:(#include<stdlib.h>)
a.malloc()——首次分配eg:mallo(需要多大*sizeof(类型))
b.realloc( , )——如果首次分配需要扩大或者缩小
分配到哪里,分配多少

c.free()——释放自己申请的内存空间


数组 (优势:使用时系统就分配好了内存空间 )
     (劣势:元素个数不变)

指针 (优势:元素个数可变,不浪费空间)
     (劣势:需要自己申请内存)


char name[20]={};
scanf("%s",name);
printf("%s",name);
输入:hi jack 
运行结果为hi没有后面的jack


注:输入字符串的时候  如果用%s输入  遇到空格或者换行都会结束  %c是遇到换行表示结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

b顶峰相见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值