【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 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...
随机推荐
- SpringCloud 源码学习笔记2——Feign声明式http客户端源码分析
系列文章目录和关于我 一丶Feign是什么 Feign是一种声明式. 模板化的HTTP客户端.在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一一样的 ...
- Win下依据端口排查步骤
Win下依据端口排查步骤 目录 Win下依据端口排查步骤 1 排查步骤 2 参考 今天突然发现自己电脑出现7680端口的内网连接,决定看看这个端口是做什么用的 1 排查步骤 确认7680端口连接情况与 ...
- 代码随想录算法训练营day01 | leetcode 704/27
前言 考研结束半个月了,自己也简单休整了一波,估了一下分,应该能进复试,但还是感觉不够托底.不管怎样,要把代码能力和八股捡起来了,正好看到卡哥有这个算法训练营,遂果断参加,为机试和日后求职打下一个 ...
- 【ASP.NET Core】标记帮助器——替换元素名称
标记帮助器不仅可以给目标元素(标记)插入(或修改)属性,插入自定义的HTML内容,在某些需求中还可以替换原来标记的名称. 比如我们在使用 Blazor 时很熟悉的 Component 标记帮助器.在 ...
- 问题集锦 ~ MySQL
# 在存储过程中,变量赋值失败 declare parent text; select parent into Parent where id = 1; select Parent; 查询的字段不能和 ...
- CF207C
前言 学习 zzd 博客( 这题超级没有素质. 连个题解都搜不到. 好不容易搜到一个. 看了一下是 pascal. 不过还好我有办法. 树剖做 \(k\) 级祖先. 十万的俩老哥飘过. 三百毫秒优异成 ...
- Solution Set - NOIP2022
种花 枚举 C 或者 F 最左边的那一竖,考虑对于每一个这一竖上的全 \(0\) 区间 \([l,r]\) 求答案. 记每个点向右延伸最多延伸到 \(L_{i,j}\),对于 C 的情况,枚举列 \( ...
- Bugku-ez_misc[wp]
题目描述 1.拿到一份abc.rar文件,里面有一个加密call.png (1)通过file . binwalk . 伪加密一顿小输出都不行,于是放进16进制编辑器查看: 文件头不对! (2)修改为 ...
- 粉色的猫MISC(bugku)
一 题目描述 ps:本题特别感谢树叶大佬给的一些提示以及WP!欢迎大家关注树木有点绿~~ 二 解题过程 下载附件得到zip压缩包 根据作者提示,压缩包注释应该为压缩包密码. 1.压缩包密码 一开始看 ...
- Cookie解码编码
这两天给客户做竞价推广时发生一件奇怪的事情: 用户搜索关键词是AA匹配关键词是AB,等于关键词和要推广的单元完全匹配,那么用户点击创意进入网站时的Url应该就是A的: 但偶然发现关键词匹配了,url却 ...