【RUNOOB】C语言学习之指针
资料来源:
(1) runoob;
(2) C语言程序设计;
注1:Runoob中对于指针的讲述比较清晰简单,摘录出来(后续补充指针与结构体,指针与函数参数);
1.指针与变量的内存位置
(1) 每个变量都有一个内存位置,它表示了一个在内存中的地址,通过"&运算符+变量名"可以访问变量地址;
(2) 指针就是内存地址,指针变量是用来存放内存地址的变量;
(3) 指针变量的类型需要与指针所指向的变量或常量的类型相同;如下图,指针变量p存放用于整型变量var_runoob在内存中的地址; *p中的*返回位于操作数所指向地址的变量的值;

(4) 指针使用示例及执行结果
1 #include <stdio.h>
2
3 int main ()
4 {
5 int var = 20; /* 实际变量的声明 */
6 int *ip; /* 指针变量的声明 */
7
8 ip = &var; /* 在指针变量中存储 var 的地址 */
9
10 printf("var 变量的地址: %p\n", &var );
11
12 /* 在指针变量中存储的地址 */
13 printf("ip 变量存储的地址: %p\n", ip );
14
15 /* 使用指针访问值 */
16 printf("*ip 变量的值: %d\n", *ip );
17
18 return 0;
19 }
1 执行结果:
2 var 变量的地址: 0x7ffeeef168d8
3 ip 变量存储的地址: 0x7ffeeef168d8
4 *ip 变量的值: 20
2.null指针
(1) 在指针变量声明的时候,如果没有确切的地址可以赋值,可以为指针变量赋一个NULL;赋为NULL值的指针称为空指针;
3.void指针类型
(1) void类型指针变量理解为"指向空类型"或"不指向确定的类型"的数据;或者,简单理解为无类型指针;
(2) 当把void指针赋值给不同基类型的指针变量(或相反)时,编译系统会自动进行转换,不必用户进行强制转换;当然,用户也可以显式转换;
1 示例:隐式转换
2 #include <stdio.h>
3
4 int main() {
5 int a=3;
6 int *p1=&a;
7 int *p2;
8 void *p3;
9 p3=p1; //系统自动转换;
10 p2=p3; //系统自动转换;
11 printf("*p1=%d\n",*p1);
12 printf("*p2=%d\n",*p2);
13
14 }
1 示例:显式转换
2 #include <stdio.h>
3
4 int main() {
5 int a=3;
6 int *p1=&a;
7 char *p2;
8 void *p3;
9 p3=(void *)p1; //显式转换
10 p2=(char *)p3; //显式转换
11 printf("*p1=%d",*p1);
12 printf("*p2=%d",*p2);
13 }
1 示例:显式转换
2 typedef struct {
3 unsigned char cnt;
4 } c7;
5
6 void * counter7_new() {
7 c7 * c=(c7 *) malloc(sizeof(c7)); //malloc函数的原型为void * malloc(unsigned int size),所以该处采用了显式转换;
8
9 }
注1:sizeof用于计算某个数据类型或某个变量在内存中占用的字节数(byte);
4.结构体指针(指针与结构体)
4.1 命名一个新的类型名代表结构体类型;
1 typedef struct {
2 int month;
3 int day;
4 int year;
5 } Date;
4.2 指针指向结构体变量以及通过指针使用结构体变量的成员
注1:结构体变量的起始地址存放在了指针变量中;
1 #include <stdio.h>
2
3 typedef struct{
4 int month;
5 int day;
6 int year;
7 } Date;
8
9
10 int main() {
11 Date date1;
12 Date *p;
13 p=&date1;
14
15 date1.month=1;
16 date1.day=1;
17 date1.year=2023;
18
19 printf("struct pointer format1-month/dayyear: %d/%d/%d\n",p->month,p->day,p->year);
20 printf("struct pointer format2-month/dayyear: %d/%d/%d\n",(*p).month,(*p).day,(*p).year);
21
22
23
24 }
【RUNOOB】C语言学习之指针的更多相关文章
- c语言学习笔记 - 指针和字符串
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = ...
- c语言学习笔记 - 指针和数组
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int mai ...
- c语言学习笔记.指针.
指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型 ...
- C语言学习之指针
指针这块,看了好久才有点头绪,稍微有点理解了. 一.指针申明以及赋值 int *p; 这样就声明了一个int型的指针p,这个p就是指针变量,可能上述的书写方式会混淆我们队指针的理解(*号) 我们可以这 ...
- C语言学习笔记--指针阅读技巧
1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注 ...
- C语言学习笔记--指针和数组的关系
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译 ...
- C语言学习笔记--指针概念
指针也是一种变量,占有内存空间,用来保存内存地址,在32位系统中指针的占用的内存大小为4个字节 1.*号的意义 (1)在指针声明时,*号表示所声明的变量为指针 (2)在指针使用时,*号表示取指针所指向 ...
- C语言学习笔记--指针与字符串
字符类型 char(character)是一种整数,也是一种特殊的类型:字符.这是因为 ① 用单引号表示的字符字符字面量:‘a’,'1' ②‘’也是一个字符 ③printf和scanf里用%c来输入. ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- GO语言学习(十五)Go 语言指针
Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...
随机推荐
- trollcave-v1-2
trollcave-v1-2 目录 trollcave-v1-2 1 信息收集 1.1 端口扫描 1.2 后台目录扫描 1.3 收集网站相关信息 1.3.1 收集网站用户名与角色信息 1.3.2 收集 ...
- 【ACR2015】持续临床缓解的RA患者能停用TNF拮抗剂吗?
标签: 类风湿关节炎; 药物减停; 生物制剂; 减停后复发 荷兰一项随机对照试验显示, 已获持续6个月临床缓解或低疾病活动度的RA患者在停用TNFi的6个月内约三分之一病情复发 Moghadam HG ...
- LeetCode-2043 两数相加题解
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/simple-bank-system 题目描述 你的任务是为一个很受欢迎的银行设计一款程序,以自动 ...
- Python3中Super函数的使用
Super函数用法 主要用于调用父类函数 代码演示 class A: def __init__(self): self.n = 2 print('此时执行A的自定义函数,self的n值为',self. ...
- [Maven] 引入依赖以后如果标红怎么办
- 前端JavaScript深拷贝的三种方法,看了不后悔!!!
深拷⻉ 深拷⻉开辟⼀个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改⼀个对象的属性,不会 改变另⼀个对象的属性 常⻅的深拷⻉⽅式有: _.cloneDeep() jQuery.extend( ...
- LP1-5:WEB应用测试技巧
一.静态页面 静态文字 1) 检查一个页面或者一组中多个页面的字体.size.颜色.位置等因素是否符合需求: 2)检查页面文字图标的间距.行距是否统一,对齐方式是否统一: 3)静态文字的含义是否符号需 ...
- 让自己的笔记本变wifi,如何设置呢?
让自己的笔记本变wifi,如何设置呢? 笔记本变wifi,居然有这样的好事,没错,就是这样的,我也是才知道,哈哈.果然,世上无奇不有,只是你不知罢了. 以win10笔记本为例,亲试有效,附上链 ...
- vue table刷新单行数据
1.给el-table加上标记方法 <el-table v-loading="loading" :data="tagList1" @selection-c ...
- Git命令学习总结(廖雪峰官方Git教程)
1.Windows系统安装完Git后,需要在Git Bash命令窗口输入以下命令,进行用户名和邮箱设置.