C语言 指针笔记:地址和指针、指针变量、char是整形的、 指针变量的基类型、指针运算、指针和数组、语法糖

指针的指针的地址,指针自身的地址,指针指向的地址理解 指针的指针,指针指向的地址,还有自身的地址之间的关系有些复杂,浅谈一下自己的理解。 #include <iostream> //#include <fstream> int test(int a, int b); int main() { using namespace std; int i = 1, j = 2; int* p1 = &i; int* p2 = &j; int** p3 = &p1; cout << "i的地址 阅读详情

一、内存(也称内存储器、主存储器)基本单位

   计算机存储信息的最小单位是 位(又称比特,写作 bit,简写 b,一位为一个 0 或 1),计算机 内存 中的基本存储单位是 字节(写作 Byte,简写 B,1B = 8b,比如 00000000、11111111、01101001)

   1B 可以表示 二进制 00000000 到 11111111 的数(即十进制的 0~255)

   1GB = 1024MB,1MB = 1024KB,1KB = 1024B, 210 = 1024(2 的 10 次方为 1024)
   所以 1GB = 1024MB = 1024 * 1024KB = 1024 * 1024 * 1024B = 10243 B = 230 B


  
  

二、地址和指针的基本概念

   计算机的内存是由 一个个字节(Byte)组成的,每个字节可保存的数据为 8b(即十进制的 0-256)。计算机内存的字节数可以有很多,2GB 的内存就有 2147483648(2 * 10243、231)个字节,把这些内存用 十六进制编号:
   第 0 个字节编为为 0x0 号(前缀 0x 表示十六进制,也可写成 0X),
   第 15 个字节编为 0xF 号,
   第 16 个字节编为 0x10 号,
   第 6421984 个字节编为 0x61FDE0
   第 2147483648 个字节编为 0x80000000(将十六进制换算成二进制的话等价于 8 * 167,等价于 23 * 24*7,等价于 231 即 2147483648)
  
  以上计算机内存中字节的十六进制编号就称为地址,地址也就是指针存放的数据(即十六进制编号)
  指针的值就是地址(指针存放的数据就是地址),地址就是编号,也就是内存中字节的编号
  下面一图更直观的看 指针(即 指针指存放的地址)、指针地址、指针指向的地址的值(不要与指针的值搞混,指针的值 是地址,该地址上存放着数据)

指针 pint 类型数据 a
数值0x666123321
地址0xF000x111

指针图片
  指针 p 就是 数据 a 的地址


  
  

三、指针变量、char属于整型的?

1.关于字符和整数

  在 c/c++ 中 char 是整数类型 的,因为字符常量存储在计算机存储单元中时,并不是存储字符(如 a,z,# 等)本身,而是以其代码(一般采用 ASCII 代码)存储的,例如字符 ‘a’ 的 ASCII 代码时 97,因此,在存储单元中存放的是 97(以二进制形式存放),而不是字符 ‘a’。
  另一方面 char 可表示 -128 ~ 127 的数,int 可表示 -2147483648 ~ 2147483647,char 本身就是值类型的,所以说 char是整数型的,不要因为 char 可以用来表示字符就把 char 不当整型,整数和符号之间是可以转换的:

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

/*char为整型*/
int main()
{
	char a ='a';
	int b = 97;
	char c = '#';	/*同理,这个字符也可以转换成整数35,或用35表示字符'#'*/

	printf("字符a = %c, 整数 b 转换成字符表示 = %c, 字符 a 转换成整数表示 = %d\n", a, b, a);
	printf("用整数 97 表示字符 = %c, 90 + 7 = %c\n", 97, 90+7);

	return 0;
}

  输出结果为

字符 a = a, 整数 b 转换成字符表示 = a, 字符 a 转换成整数表示 = 97
用整数 97 表示字符 = a, 90 + 7 = a

  
  

2.指针变量

  言归正传,平时保存的数据类型一般都是基本类型的数据,如整型 int / long / shore / char、实型 float / double,如果要保存地址怎么办呢?
  地址不能被保存到普通变量中,这时候就到指针变量出场了,指针变量这种变量是专门用来保存地址的,指针变量也可简称为指针
  如何定义指针变量呢,如果有定义整型变量 a int a = 1;,为了保存 a 的地址,我们可以定义这样一个指针 p :
  定义指针变量和定义普通变量的形式类似,只需要在变量名前加 * 号

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

/*定义指针*/
int main()
{
	int a = 1;
	int *p;	/*定义指针,也可以写成 
	int* p; 
	int * p;*/
	p = &a;	/*将a的地址保存到指针p中*/
	
	printf("整数a=%d的地址是%#x,\n指针p的地址是:%#x\n", a, p, &a);

	return 0;
}

  输出结果:

整数 a = 1 的地址是 0x61fe14,
指针 p 的地址是:0x61fe14

  注意这里的 *号 不是 *指针运算符 ,* 号是一个标志,有了 * 号才表示所定义的是指针变量,才能保存地址
  1.变量名是 p,不是 *p
  2.变量 p 的类型是 int * ,不是 int
  指针变量 p 保存了普通变量 a 的地址,就是 “对准了” 普通变量 a ,因为可以通过 p 中所保存的这个地址来访问变量 a(就是存取变量 a)。我们称:

指针变量 p 指向了变量 a

或称:

p 是指向变量 a 的指针变量、
p 是指向变量 a 的指针

  
  在一条定义语句中可以同时定义多个指针变量、普通变量

	double *m, n;
	int *x, *y, z;	/*定义指针时必须有* 号,否则就是普通变量*/
	int* a, b, c;	/*定义了一个指针 a,和两个普通变量 b、c,并非定义3个指针*/

  
  

四、指针变量的基类型

  上面说到指针变量时,提到过:
  

2.变量 p 的类型是 int *

  “ int * 类型 ” 是什么含义呢?它表示指针变量 p 所指向的数据类型是 int 型,也就是说将来 p 要保存一个地址,但这个地址有讲究,必须是一个 int 型数据的地址才能被保存
  
   int * 中 int 表示该指针变量将保存何种类型数据的地址,换句话说是指针变量所能指向的数据类型,该类型称为指针变量的基类型
  
  指针变量要保存的地址必须是基类型这种类型数据的地址,指针变量只能指向同基类型的数据
  
void 基类型的指针:

	void *p;	/*该指针能指向任何基类型的数据*/
	int a = 1;
	float b = 3.14;
	double c = 3.333;
	char d = 'd';
	
	p = &a;	/*p指向a*/

	p = &b;	/*p指向b*/

	p = &c;	/*p指向c*/

	p = &d;	/*p指向d*/

  
  

五、指针变量赋值

   变量定义了不赋初值,其值就会是随机数
   指针也一样,定义了不赋初值,其保存的地址就会是随机地址,即指向内存中随机的数据,这很危险,说不定指向的是系统运行所必须的一个很重要的数据,如果通过指针修改指向的数据,可能系统就崩溃了(虽然并不会这样,系统的文件一般会有保护的,没那么容易修改),所以为了避免悲剧,指针必须赋初值

	int a = 100;
	/*以下赋值都是正确的*/
	int *p = &a;	/*第一种,其含义是p=&a而不是*p=&a,*是和 int结合的 */

	int *p;
	p = &a;	/*第二种*/

	int *p = 0;	
	int *p = NULL;	/*第三种,不允许把整数赋值给指针,0除外,字符NULL的ASCII为0*/

   针对第三种赋值,系统规定,如果一个指针变量里保存的地址为0,则说明这个指针变量不指向任何内容,叫做空指针。


  
  

六、指针的两个运算符

   1. & 取址运算符,获取变量地址
   2. * 指针运算符(或称间接访问运算符),获取或改写以指针 p( p 指向的地址)为地址的内存单元的内容(注意别和定义时的 * 号 搞混了),如:

	int a = 101;
	int *p = &a;
	printf("*p 的值为 %d, a 的值为 %d", *p, a);	/*输出两个101*/

   因为 p 保存的是 a 的地址,* p 就是取 a 地址保存的数据(101),* p 等价于 a
   & 和 * 运算符的运用:

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

/*&和*的运用*/
int main()
{
	int a = 1, x = 2, *p;
	p = &a;
	x = *p;	/*等价于x=a*/
	*p = 5;	/*等价于a=5*/
	
	printf("%d %d %d", a, x, *p);	/*输出5 1 5*/
	
	return 0;
}

   int a = 5, *p = &a;
   p 表示指针 p 保存的值( a 的地址)

   &p 表示指针 p 本身的地址

   * p 表示指针 p 指向的数据,是变量 a

  &、* 互为逆运算,即一个 & 和 * 可以相互抵消如:*&p 等价于 p 等价于 &a 、*&*&*&*p 等价于 *p 等价于 *a

   利用指针比较两数大小:

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

/*利用指针比较两数大小*/
int main()
{
	int a = 0, b = 1, *p, *q, *t;
	p = &a;
	q = &b;

	scanf("%d %d", p, q);	/*p,q也可以用&a,&b代替*/

	if(a < b)
		t = p, p = q, q = t;
	printf("最大值:%d, 最小值%d", *p, *q);

	return 0;
}

  a、b 本身的值没变,变的只是指针 p、q 指向的数据,p 指针指向最大的数,q 指向最小的数


  
  

七、指针和一维数组

  如有定义一维数组 int a[5] = {1, 3, 0, 5, 9};
  那么指针 int *p = &a[0] 则指向 a[0],指针指向的数组类型也必须同基类型的数组
  此时,如果 p + 1; printf("%d", *p); ,会输出什么?答案是输出3
  如果有定义指针 int *q = &a[3];,那么 printf("%d", q - p); 会输出什么?答案是 2

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

/*指针加减整数、指针相减*/
int main()
{
	int a[5] = {1, 3, 0, 5, 9};
   	int *p = &a[0], *q=&a[3];
   	
	/*指针加整数*/
   	p++; 
   	printf("p + 1:%d\n", *p);	/*输出 a[0+1],下标 +1,即 a[1],值为 3*/

	/*指针之间相减*/
	printf("q - p:%d", q-p);		/*输出 2,下标之间相减 3-1=2*/

    return 0;
}

  输出结果:

	p + 1:3
	q - p:2

  1.指针 p ± 整数 n,不是简单的将指针 p 保存的地址加减整数 n,而是加减 n 个“单位”,即 n 个“数组元素”的字节数,也可以理解成数组下标的加减,运算法则:

p ± n = p 中保存地址值 ±(每元素字节数*n)

  
  2.两指针相减,结果为两个地址间相差的单位个数(数组元素个数),运算法则:

p2 - p1 = (p2 保存地址 - p1 保存地址) / 每元素字节数

  
  通过两指针相减,可以求出指针 p 指向的数组元素的下标:

	int a[10] = {1, 3, 2, 4, 5, 7, 9, 6, 8, 0};
   	int *p = &a[4];

	printf("指针 p 指向的数组元素的下标是:%d", p - &a[0]);	/*输出4 */

  输出结果:

指针 p 指向的数组元素的下标是:4

  
  

八、一维数组的指针:一维数组名是指针变量?

  int a[5]; 对于一维数组名 a 有:我们可以用 a 来表示数组 a 的首地址(即 &a[0]),a 是一个假想的“指针变量”,它本质上是数组 a 的名字且它表示的地址不能被改变(也有人称数组名 a 是指针常量),所以在对指针变量赋值时可以这样:

	int a[5] = {1, 3, 5, 7, 9};
	int *p;
	/*以下两种写法都可以*/
	p = &a[0];	/*写法一*/
	p = a;	/*写法二*/
	
	/*对于数组元素,a[i]等价于p[i]*/
	printf("%d %d", a[3], p[3]);	/*输出两个7*/

  输出结果:

 7 7

1.指针的语法糖、两个重要公式

  数组名 a 是 “指针变量” ,具有指针变量的所有特性(只要不改变 a 的值 )
  语法糖也叫糖衣语法,在不改变原语法意思的基础上用另一种更简单、可读性更好的语法表示,这种可读性更好的语法就叫语法糖,例如:
  int a[5], *p = a; ,前面学习了 间接访问运算符、指针加减法,*(a + i) 和*(p + i) 实际上都是表示数组元素 a[i] ,a[i] 就是 *(a+i) 和 *(p+i) 的语法糖
  公式 1:

*(a + i) 等价于 a[i]

  
  对公式 1 两边同时做 & 运算,得到公式 2:

a + i 等价于 &a[i]

  公式 1、2 不仅适用于数组名,也适用于所有类型指针变量(一级指针、二级指针乃至更高级别的指针变量,也就是说公式 1、2 也可以写成 *(p + i) 等价于 p[i]) 、 p + i 等价于 &p[i]
  

2.间接访问运算符与++、-- 的优先级

	int a[] = {1, 3, 5, 7}, *p = a + 1;
	printf("%d ", *p++);	/*p++是在语句结束后才p=p+1的,所以相当于*(p++);*/
	printf("%d ", ++*p);	/*此时p指向a[2]值为5,先做*p,然后(*p)+1,不影响 a[2]值*/
	printf("%d ", (*p)++);	/*跟上一句相同,是*p+1,不是*(p+1) */
	printf("%d ", *++p );	/*这个就是*(p+1) */

  输出结果为

 3 6 6 7

  
  

使用指针逆置数组,然后遍历输出

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

/*使用指针将数组头变尾、尾变头,然后顺序输出数组*/
int main()
{
    int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int *p, *q, t;

    p = a;   /*或p=&a; p=&a[0]*/
    q = &a[9];	/*或q=&a+9;不能写成a[9],a[9]表示的是值9*/

    /*交换头尾元素*/
	while(p<q)
	{
		t = *p, *p = *q, *q = t;
		p++, q--;
	}

	/*输出数组*/
	for(p = a; p <= &a[9]; p++)
		printf("%d ", *p);

    return 0;
}

  输出结果为

 9 8 7 6 5 4 3 2 1 0
【软考高项论文】论信息系统项目管理的干系人绩效域 例如,在处理与电信运营商合作铺设光纤网络的问题时,考虑到其在通信设施建设和运维方面的专业性和重要性,我们将之定位为高权力高利益的干系人,给予了高度关注和优先沟通。项目全程,我们对干系人绩效域的执行效果进行了定期检查和评估,通过定量与定性的数据收集,确认了项目在干系人管理上的成效,具体表现为:建立了稳固的工作关系网络,使干系人普遍认可项目目标;鉴于本项目牵涉到政府各级部门、企事业单位、市民团体、技术研发伙伴等多种类型的干系人,且干系人的诉求和影响力各异,因此,有序且持续的干系人参与管理显得尤为关键。 阅读详情

相关推荐

PADS Layout差分对布线实战:从规则设置到高速信号优化

本文详细讲解了在PADS Layout中进行差分对布线的完整实战流程。从在Layout中定义差分对网络,到进入Router配置线宽、间距等关键规则,再到布线实战技巧与高速信号完整性优化,系统阐述了如何确保差分信号(如USB、HDMI)的稳定传输,是高速PCB设计的核心技能。

weixin_29274969的博客 523

C语言指针操作(一)地址,指针,指针变量是什么

地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?指针是C语言中的一个重要概念,也是C语言的一个重要特色;使用指针,可以使程序简洁、紧凑、高效。不掌握指针,就没有掌握C语言的精华。

伯努利 5528

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

这两个函数是我在 LeetCode 上做题见到,看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受,于是在C++ 官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。最终通过查阅资料将其总结如下。

weixin_45031801的博客 9万+

【C语言】——认识指针变量和地址,以及指针变量类型的意义

指针变量也是⼀种变量,这种变量就是用来存放地址的,存放在指针变量中的值都会理解为地址。指针变量的大小和类型无关,只要是指针变量,在同⼀个平台下,大小都是⼀样的

cz382487322的博客 3829

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 715

树莓派编译程序时遇到卡死的问题

使用树莓派编译程序的时候,我遇到了程序比较大,编译到某个文件的时候树莓派会死机,关机之后重启可以继续使用,但是编译到同一个地方树莓派又死机的问题。 这个问题出现的主要原因是我给树莓派安装的Ubuntu mate 16.04 系统默认设置的swap交换空间不够,而编译某些文件的时候需要较大的交换空间,树莓派的交换空间被用满所以树莓派看起来好像是死机了的样子。 解决方法,扩展Ubuntu的交换空间。 解决方法,扩展Ubu

一杯二锅头 1万+

【从零基础学习C语言】地址与指针—第六篇

在计算机中,所有数据都存在内存单元(空间)中,每个内存单元都有一个地址,只要通过地址就可以找到内存单元,就可以找到内存单元数据。 由于通过内存地址就能找到对应的内存单元数据内容,就说内存地址指向该变量数据(内存空间),我们就把这种描述叫做指针。指针就是地址指向内存空间,其实就是地址。 指针:内存空间的地址,地址指向这个内存空间(变量数据)

博客小新 6304

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 464

【C++】指针、引用以及const限定符的学习总结

一、引用 1.1、左值引用(引用)  1.1.1、定义  1.1.2、引用的一些注意点 1.2、右值引用 二、指针 2.1、语法 2.2、空指针 2.3、void* 指针 2.4、指向指针的指针 2.5、指向指针的引用 三、const限定符 3.1、定义 3.2、const的引用 3.2.1、涉及类型转换 3.2.2、不涉及类型转换 3.3、const和指针 3.3.1、指向常量的指针(指针常量) 3.3.2、常量指针 3.3.3、指向常量对象的指针常量 3.4、顶层const 3.5、常量表达式和cons

lrzHHl的博客 368

CST入门——0. 安装CST Studio Suite 2022

安装CST Studio Suite 2022详细操作步骤

plmxu34的博客 6万+

路径规划 | 图解RRT*算法(附ROS C++/Python/Matlab仿真)

RRT*算法针对传统RRT算法进行了渐进最优改进,在添加节点到搜索树的过程中进行重连选择。本文图解RRT*算法原理,并采用ROS C++、Python、Matlab三种语言实现算法,加深理解

FRIGIDWINTER的博客 9406

数据类型之指针

指针指针是基本数据类型的一种指针的实质指针不像其他数据类型一样有确定的类型.指针变量和指针常量有确定的类型.指针存储的是一个字节内存的地址.指针不是一个字节内存的地址指针包括地址和类型.地址像 0x0000ffff 就是内存中的一个地址类型 int * 型 int * * 型 char * 型 double * 型 struct a * 型 int ( * )[4]型 int ( * )fun(vo......

u011011827的博客 1725

第十二章 供水管网水力模型软件介绍

本文介绍了国内外主要供水管网建模软件及其特点,重点分析了某高建模软件V14的创新功能。国际主流软件包括开源的EPANET、商业软件InfoWorksWS、WaterGEMS和MIKEURBAN,各具特色但存在应用局限。某高V14软件实现了管网GIS与模型一体化管理,采用一G多网、一网多模、一模多案、网模合一技术路线,支持全信息模型建立和动态数据更新。其创新点包括水量分配理念革新(精确/模糊匹配、三种用水模式)和首创Web服务功能。通过并发计算、GPU加速等技术优化性能,具有较高性价比。

weixin_45258875的博客 208

指针的简单记录

指针部分的简单记录!

qq_18080225的博客 376

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言之指针详解(1)

什么是指针: 指针(pointer)是一种数据类型(整数),这种类型定义出的变量叫指针变量(简称指针)。 计算机的内存是由一个个字节组成的。内存的每个字节都有一个整数编号(十六进制),这个编号通常叫做地址。指针中存储的就是地址。 1bit 是最小的可用单位,能存储1或0;1byte = 8bit;1kb = 1024byte;1mb = 1024kb;1gb = 1024mb;1tb = 10...

Marco___的博客 974

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c语言 --- 指针

什么是指针 指针就是一个地址,如何获取地址?用的是&:取地址符 指针就是一个整数 获取指针:& 指针变量 存放地址的,也就是存放一个特定的整数(这个的整数可以表示地址) 如何产生一个指针变量 类型* 变量名; 类名 *变量名; 指针变量的两个重要概念 指针的类型: 去掉变量名 指针所指向的类型:去掉变量名和*号 用指针的时候需要保持上述两个类型的一致 int* p; //类型: int* //所指向的类型: i

weixin_60569662的博客 6748

关于int*p=&a与int p;p=&a;与p = a;与&p的解惑

关于int*p=&a与int p;p=&a;与p = a;与&p的解惑 指针是什么 在C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。通俗来讲指针就是存放内存单元的的地址。如图 其中int *是指针变量的类型,p是变量名,&为取地址运算符,&a即取a的地址0x61fe14,所以p中存的内容为0x61fe14。为取值运算符 p的含义为取p的值,也就是(0x

qq_47548559的博客 1万+

C语言——指针详解(进阶)

C语言指针进阶版,带你更快掌握指针。

plj521的博客 1344

【C++碎碎念】指针

【C++碎碎念】指针

小石_coding 1306

C语言——指针超详细讲解

指针就是内存地址内存地址就是指针,或者说指针是用来存放内存地址的。这意味着当我们有一个变量的地址时,我们可以将这个地址存储在一个指针变量中,我们口头说的指针其实指的是指针变量,指针变量就是一个存放地址的变量。

2301_78724721的博客 1754

详细解读指针(一)——访问数据的地址

初步解读指针

学习笔记,欢迎批评指正。 2160

指针(地址)小结 C语言

1.&a是变量a的地址,&是取地址(指针)运算符, 2.指针变量是存放指针的地址 3.指针变量的值是地址数组名是一个地址(指针),是数组首元素的地址 4.函数名是一个地址(指针)是指向函数代码的首字节 5.函数的实参如果是数组名,传递给形参的是一个地址(指针) 6.凡数据必有类型,指针也是,它是按指针形数据进行存储的 7.区分指针和指针变量,前者就是地址,后者的值是地址 8.指针的指向即通过地址能找到具有该地址的对象,void *指针是一种特殊指针不指向任何数据 目前先总结这

m0_52941127的博客 1062

地址、指针、指针变量详解

指针和指针变量的关系 指针就是地址,地址就是指针。 地址就是内存单元的编号。 指针变量就是存放内存地址的变量。 指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。 ...

想好了就去做吧 即便失败了 至少这条路上留下了你的脚印 1万+

C语言基础(七)—— 指针、指针变量

内存含义:存储器:计算机的组成中,用来存储程序和数据,辅助CPU进行运算处理的重要部分。内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。外存:外部存储器,长时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、NOR)、硬盘、光盘。内存是沟通CPU与硬盘的桥梁:暂存放CPU中的运算数据暂存与硬盘等外部存储器交换的数据指针也是一种数据类型,指针变量也是一种变量指针变量指向谁,就把谁的地址赋值给指针变量“*”操作符操作。

此心光明事上练的博客 2860

C语言—指针

i = 100 直接访问 *p = 100 间接访问。定义指针变量的一般形式为 : 基类型 指针 变量名;“int *p” 指针变量 此时“ * ”为类型说明符。3、将偏移好的那部分内存空间当作是一个基类型变量来看。*p+n 向后偏移 n * sizeof(基类型)2、从定位处开始向后偏移 sizeof(基类型)*p “*”为指针运算符,间接访问某变量。1、通过指针变量中的值到内存空间中定位。基类型:指针变量装什么类型的地址。指针是用来装地址的数据类型。

2301_77841194的博客 206

指针知识整理

一、何为指针?首先我们有了解以下预备知识(1)内存:内存是顺序编号的一些列存储单元组成的,在内存中,每个存储单元都赋予为敌的编号(地址),计算机通过地址可以方便的在内存单元中存储数据。(2)可以将函数名通过%x打印出该函数的地址。(3)一个程序载入内存,代码和数据都有地址编号。(4)变量名就是对内存一段空间里面数据的抽象,变量的类型决定了读取的字节数...

hixiaogui的博客 2569

数据结构入门——预备篇

数据结构入门——预备篇 指针——c语言的灵魂 指针与地址 指针就是地址,地址就是指针。 指针变量是存放内存单元地址的变量 指针的本质是一个操作受限的非负整数(操作受限:对于整数来说,可以有加减乘除取余等运算,但是对于地址来说,只有加减。) 指针的定义 #include<stdio.h> int main (void){ int * p; //p是个变量名字 , int * 表示该p变量只能存储int类型变量的地址 int i = 10; int j;

qq_41910976的博客 637
上一篇: C语言 二维数组的查找 二分查找(折半查找)、暴力搜索(暴力求解)、线性查找(从右上角出发查找、从左下角出发查找 剑指offer解法)
下一篇: C语言 生成随机数 srand用法 伪随机函数rand srand需不需要重新播种问题 srand该不该放在循环里
我的大老婆
博客等级 码龄8年 118粉丝 20原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值