首页 > 其他分享 >C语言学习————常量和宏、初识指针

C语言学习————常量和宏、初识指针

时间:2024-08-18 12:26:38浏览次数:14  
标签:int pa C语言 地址 初识 内存 printf 指针

#define 定义常量和宏

define 是一个预处理指令

用途:1.define 定义符号

#define MAX 1000
int main()
{
	printf("%d\n", MAX);
	return 0;
}

2.define 定义宏

#define ADD(X,Y) ((X)+(Y))
int main()
{
	printf("%d\n", ADD(2, 3));
	return 0;
}

指针

内存

内存是计算机上特别重要的储存器,计算机中所有程序的运行都是在内存中进行的。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是一个字节。

为了能有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

这样,就引出来两个问题

1.内存是怎样进行编号的?

2.一个这样的内存单元是多大空间?

1.计算机分为32位和64位

32位:32根地址线——物理意义上的线,可以通电——正电是1负电是0

电信号转换为数字信号就可以得到0和1组成的二进制序列

00000000000000000000000000000000

00000000000000000000000000000001

......

011111111111111111111111111111111111

10000000000000000000000000000000

......

111111111111111111111111111111111111

会产生2的32次方这样的二进制序列,有2的32次方个内存单元

一个这样的二进制序列就是一个地址,即编号

2.假设一个内存单元是1bit,有2的32次方个内存单元,所以就有2的32次方个bit

用计算机算出,2的32次方对应4,294,967,296个bit

4,294,967,296 bit /8

=536,870,912 byte /1024

=524,288 kb /1024

=512 mb /1024

=0.5gb

由于这样管理过于细致以及浪费,最终决定以一个byte作为一个内存单元

最终,一个内存单元是一个字节,然后分配地址.

int main()
{
	int a = 10;//a在内存中要分配空间-4个字节
	printf("%p\n", &a);//%p 专门用来打印地址
	return 0;
}

在vs输入如上代码,并F10调试,在到达printf行后,点击调试-窗口-内存-内存1

并在出来的窗口地址栏里输入&a,就可以看到a的地址

同样,在调试-窗口-监视-监视1中

在搜索栏里搜索&a,同样也能看到a的地址

int main()
{
	int a = 10;//a在内存中要分配空间-4个字节
	printf("%p\n", &a);//%p 专门用来打印地址
	int* pa = &a;//pa是用来存放地址的,在C语言中被称为指针变量
	//* 说明,pa是指针变量
	//int 说明pa执行的对象是int类型
	//举一反三:
	char ch = "w";
	char* pc = &ch;
	return 0;
}

如上,* 说明后面的pa是指针变量,前面的int表明pa执行的对象是int类型

同样下面的代码,pc是指针变量,而它执行的对象是char类型

所以,我们可以取出一个变量的地址,但如果要存起来,那么就要用到指针变量。

int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20;//* 叫解引用操作符  *pa就是通过pa里面的地址,找到a
	printf("%d\n", a);
	return 0;
}

指针变量的大小

int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(float*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(long long*));
	printf("%d\n", sizeof(double*));
	return 0;
}

发现所有的指针大小都是8

因为指针是用来储存地址的,指针需要多大空间,取决于地址的储存需要多大空间

所以指针的大小都是相同的 

标签:int,pa,C语言,地址,初识,内存,printf,指针
From: https://blog.csdn.net/Changxin_Hou/article/details/140833000

相关文章

  • C语言 错误 C4716 “printstar”: 必须返回一个值
    错误:解决办法: 此类代码显然不需要返回值1.点击“项目”——“属性”2.点击“C/C++”中的“高级”——“禁用特定警告”中输入“4716”——点击“确定” 3.重新运行即可成功 ......
  • c语言(8.18)
    补一下前几天练习的代码#include<stdio.h>intmain(){ intn=0; //scanf("%d",&n); intsum=0; for(intj=1;j<=10;j++) { intmul=1;//mul应该放在里面才行,每一次新的阶乘mul都是1 for(inti=1;i<=j;i++) { mul=mul*i; }......
  • 【时时三省】(C语言基础)调试技巧2
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省多多动手,尝试调试,才能有进步。•一定要熟练掌握调试技巧。•初学者可能80%的时间在写代码,20%的时间在调试。但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。•我......
  • 【C语言初阶】掌握C语言调试技巧,迈向高效编程的阶梯
    ......
  • 油管视频《编程思维》中的题目,使用C语言编写出来,第十集,世界上的机器
    题目:假设首先我拥有大量的机器人,从迷宫中心的水晶出发,其次我拥有取之不尽的线轴,这些线非常结实耐用,可以在必要时刻切断线,现在面对一个迷宫,迷宫以水晶为中心,哪里有许多条死胡同,但没有一条会绕回到起点,我只有一次机会,可以在机器人们跳入迷宫,寻找出口前,发送一条简单的指令,请问什么......
  • 指针详解(二)
    目录1. const修饰指针1)const修饰变量2)const修饰指针变量2. 指针运算1)指针+- 整数2)指针-指针3)指针的关系运算3. 野指针1)野指针成因2)规避野指针4.assert断言5. 指针的使用和传址调用1)strlen的模拟实现2)传值调用和传址调用1. const修饰指针1)const修饰......
  • C语言程序设计-[22] 数组应用
    1、简单插入排序算法根据以上分析,代码与结果如下:#include"stdio.h"intmain(){ intcount,j,x,a[101];scanf("%d",&x);if(x<=0) return;else a[1]=x;count=1;scanf("%d",&x);while(x>0){ ......
  • 【C语言】字符函数和字符串函数
    文章目录前言一、字符分类函数二、字符转换函数三、字符串函数的分类四、strlen函数的使用五、strcpy和strncpy函数的使用1.strcpy2.strncpy六、strcat和strncat函数的使用1.strcat2.strncat七、strcmp和strncmp函数的使用1.strcmp2.strncmp八、strstr函数的使用九、s......
  • c语言计算二叉树的带权路径长度之和(WPL)
    1.WPL:树中全部叶节点的带权路径之和2.代码中所画的树为:3.求上述WPL:WPL=0*1+1*2+1*3+2*4+2*5=234.主要代码为:intwpl(Node*ROOT,inthigh){ intn=0; if(ROOT!=NULL){ n=ROOT->weight*high; n=n+wpl(ROOT->lchild,high+1); n=n+wpl(ROOT->rchild,high+1); } r......
  • 【C++进阶学习】第十三弹——C++智能指针的深入解析
    前言:在C++编程中,内存管理是至关重要的一个环节。传统的手动内存管理方式容易导致内存泄漏、悬挂指针等问题。为了解决这些问题,C++引入了智能指针。本文将详细讲解C++中智能指针的概念、种类、使用方法以及注意事项。目录一、引言二、智能指针的原理及目的2.1智能指针......