C语言笔记(指针)

 

必须是变量才能取到地址;&必须跟变量

 

 

%p是输出十六进制的数 

&a=a=&a[0]+4=&a[1]   数组在栈里面a[0]在最下面

 计算机的所有东西都是人做出来的

别人能想得出来的,我也一定能想得出来

在计算机里头没有任何黑魔法

所有的东西只不过是我现在不知道而已

总有一天我会把所有内部的细节,所有的东西全都搞明白

 *p 表示说p是一个指针

int* p = &i;

 通常说是p指向i;实质上是变量p里内容是i所在的地址。

*p是一个指针,不管*靠近谁; 

 

 

 

 

 *p这个整体可以表示指针所指向地址上变量的值。

 通过*p都可以改变函数外面i里面的值

 

 

 

 因为在32位架构中,&i与i的地址是相同的,所以他认为你传了一个地址进去。所以编译不见得会报错。

指针的用处

返回值只能返回一个;所以这里用指针来交换。

 

 

从main里面送两个地址进去, 指针他们的作用是把结果带出来,如果不用指针  结果没有办法带出函数。

 

 *result的作用是把结果带出来,而这个函数自己的返回值ret可以来判断这个函数是否成功了。

 int *p;

*p=12;

这样的写法是错误的,因为*p里面不可以直接写入东西,他应该是指向某个东西;应该先给地址再赋值。

 

 

 一个数字当作一个指针 所以不能直接赋值或者与别的数组交换。

 

 

 p所指向的地址是变量

 *p所指地址上变量的值是const;

 在*号前面表示*p所指的值是不可修改的

在*号后面是表示指针不可被修改

 

 

 

 

 char数组:一个单元占一个字节   int数组:一个单元占四个字节

给指针加1表示指针指向了后面一个单元的地址,即给指针指向的地址加上一个(char或者int)的字节数

 加括号的原因是*是单目运算符,比+的优先级要高,所以要加括号。

 

 

 

 

指针相减得到的是数据个数的差值,这个个数乘上 seizof(类型),就是地址查。

 先取p所指向的值 再给*p加一

 之前的遍历程序写法:

 

用*p++进行遍历先取后加一

 手动加一个-1来判断是否遍历完成

 

 

 

 

 想用malloc函数 头文件得加#include<stdlib.h>

 

 内存申请

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	void *p;
	int cnt = 0;
	while((p=malloc(100*1024*1024))){
		cnt++;
	}
	printf("%dMB\n", cnt);
	
	return 0;
}

 

 有借有还

 

 纸上得来终觉浅,绝知此事要躬行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值