【C语言学习笔记】5指针

& 取地址符号 https://www.icourse163.org/learn/ZJU-9001#/learn/content?type=detail&id=142003&cid=153102&replay=true

32位架构 64位架构

地址取加1  字节4个

堆栈存储 

存储地址之间序号 也跟变量类型有关

 

增加也是跟数据类型有关 而不是说加1  地址加1 ( x )   而是加数据类型所对应的字节

 %p(查看地址)

 

第一种得到地址 第二种只得到值(性质不一样了)                  

下面第一种不影响 i    第二种影响了i

 

scanf ("%d", &i)  scanf("%d",i)  定义i会给你一个地址 存到地址里面

交换要用指针用 

指针 java没有 c语言主要是值做参数 返回-1 和0 出错 

这也让c可以在函数里面有一种特殊方式改变值 

#include "pch.h"
#include<stdio.h>

int divide(int a, int b, double *res) {
	int ret = 1;
	if (b == 0) {
		ret = 0;
	}
	else {
		*res = a * 1.0 / b; //同时返回两个值 一个用函数返回 另外一个是通过修改地址
	}
	return ret;
}
int main()
{
	int a;
	int b;
	double c;
	scanf("%d %d", &a, &b);
	if(divide(a,b,&c))
		printf("%d/%d=%f",a,b,c);
	else {
		printf("代码有误");
	}
	return 0;
}

常见错误就是定义了指针变量 还没指向任何变量,就开始使用指针 就是下面这种

正确方式

简单的小测试

%p地址输出所对应的符号  也要加&

https://www.cnblogs.com/bingdaocaihong/p/6949891.html

按照我们的理解,int占用4个字节,应该相差4个字节。
这是因为VS在Debug模式下,int变量占用12个字节。
可以这样认为,Debug模式下,在int变量的前后各增加了4个字节,用于存储调试信息。
当我们把模式设为Release,就会发现栈上连续定义的int变量,地址相差4个字节

 未赋值的变量 指定的地址可以说是未知的

赋值前后地址的变化 赋值影响地址的设定

  

数组和指针

通过数组传给一个函数 函数的接受到的数组的状况      导入是一个int *  而非 int       

int( *a)  == int(a[]) 可以相互替代

*变量加了&反而错了 地址出错

猜你喜欢

转载自blog.csdn.net/kevin_nan/article/details/89944967