C语言指针

指针:就是地址就是所谓的内存编号
指针变量:存放另一变量的地址(用来存放地址的)
本质是变量。

在32位(64位)平台任何类型的指针变量都占4字节(8字节)空间(char *p,int *p,short *p)
同一系统保存地址都是同一的大小。
在这里插入图片描述
学好指针变量必须弄懂俩个问题:int p
指针变量自身的类型;只需要把符号拖黑int *
//指针变量所指向的类型;
指针变量保存啥类型的地址:int
(把符号跟符号最近的
拖黑 剩下的类型就是了)

在这里插入图片描述
这个地方的话,p=&num2.不能直接p=num2 因为数组名代表的是第0个元素的地址,这里的p的存放的是整体的首地址。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
p = #指针变量p保存num的地址=p指向num;
*p用来取出num的值,就是代表p所保存的地址对应空间里面的值。可读可写//*p = num;
在这里插入图片描述
在这里插入图片描述

指针变量所取空间的内容的宽度是由所指向类型的长度决定 (把指针变量跟最近的*拖黑后的类型)

指针变量+1:p2+n p2跳过n个单位的宽度(单位宽度就是所指向类型的长度决定
在这里插入图片描述

三种字符串的存储方式:
1.数组形式存储和2.
字符串指针变量形式存储。字符串指针变量形式的开的是文字常量区。“hello”是字符常量

在这里插入图片描述

区别在于
hello是字符常量不能被修改。上面的代码//char *str =“xixixi”;不是指把xixixi赋值给str,是把
xixixi的第0元素的地址给str。

在这里插入图片描述

第三种方式:堆
1.初始化赋值:堆在存放字符串的时候不能初始化,只能使用strcpy、scanf赋值
//char *buf_heap;
buf_heap=malloc(20);
strcpy(buf_heap,“hell world”);

2.使用时赋值:字符数组:使用scanf或者strcpy
//strcpy(buf_aver,“hello”);
scanf(“%s”,buf_aver);

在这里插入图片描述
//char *str=NULL;
str = (char*)malloc(128);这个地方必须用str来接malloc的地址,不然会造成内存泄漏;
//申请后要知道申请的内存的地址,使用完后要free。

if(str == NULL)
{
perror(“malloc”);//因为从堆申请空间不是都能成功所以加上判断,失败就退出程序。
exit(0);
}
strcpy(str, “hello”);
str[0] =‘H’;
printf(“%s\n”,str);
free(str);//使用完堆要释放。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值