c语言从0->1入门——指针(上)
2023-06-13 09:15:52 时间
关于作者:
2019NOIP退役成员,学习c语言已有多年经验,更懂得考试的题目,和初学者学习时所遇到的问题 华为云享专家,以及CSDN的新星创作者,有写博客的一定能力
关于本栏目
本栏目的宗旨是带你入门c语言,作者打算用题海+c语言的概念来完成本栏目,
适用人群:面向广大的编程爱好者和大学生来进行创作 学完本栏后你能达到的水平:计算机二级水平左右,入门c语言学习 题目:主要来源于网络和c语言的入门算法题目
写在前面的话(第十一天)
记住我们的宗旨:努力去做,让一切交给时间来评判!
指针由于它和内存相对应,对初学者来说还是比较难理解的,本节需要大家仔细品味
指针
在c中提出专门的类型来表示变量的地址
char* 表示一个char型变量的地址
int* 表示一个int型变量的地址
flot* 表示一个float型变量的地址
double* 表示一个double型变量的地址
……
带*号变量的表示一个指针型变量,简称指针
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int *p = &a;//p指向a的地址
printf("%d\n", *p);//*p为解引用操作,输出p所存储的值
p = &b;//将p的地址修改为b的地址
printf("%d", *p);
}
不同类型的指针不能相互赋值,像这样,char* p与int *q; 具体的来说,char * 称之为char型指针类型,int *称之为int型指针类型
在用printf打印时,通常可以使用%p来打印,p为pointer *号的位置可以自由,
int *a
int* a
int * a
星号操作
*来返回位于操作数所指定地址的变量的值
#include<stdio.h>
int main()
{
int a = 1;
int *p = &a;
*p = 123;//写操作:修改p地址中的值
printf("%d\n", a);
int b = *p;//读操作:读取p地址中的值赋值给b
int c = *p + 1;
printf("%d %d\n", b, c);
}
区别星号,在定义一个变量的时候,星号表示一个指针类型, 在星号操作中,星号表示读写内存的值。
指针变量的初始化
作为一个指针变量,有以下几种初始化的操作
- 利用取地址获取 x 的地址,在指针变量 p定义时,赋值给 p, 像我们上文中的一样
- 定义指针变量,分别赋值“NULL”和“0”,称之为空指针
在c中值为0的指针,我们称之为空指针,当指针为空的时候,不能使用*号操作,那么如何判断呢?
if(p)//当指针p不为空时候
{
printf("%p",p);
}
指针不同于其他变量的运算规则
指针变量的加减法,和普通整型变量的加减法是不同的,当指针加减是,是以元素为单位进行移动的,例如,p+1便是移动到后一个元素,p-1便是移动到前一个元素
//定义三个变量,假设它们地址为连续的,分别为 4000、4004、4008
int x, y, z;
//定义一个指针,指向 x
int *px = &x;
//利用指针变量 px 加减整数,分别输出 x、y、z
printf("x = %d", *px); //因为 px 指向 x,所以*px = x
//px + 1,表示,向前移动一个单元(从 4000 到 4004)
//这里要先(px + 1),再*(px + 1)获取内容,因为单目运算符“*”优先级高于双目运算符“+”
printf("y = %d", *(px + 1));
printf("z = %d", *(px + 2));
关系运算
作为变量,那么它也应该是可以比较的,我们来看
- px > py 表示 px 指向的存储地址是否大于 py 指向的地址
- px == py 表示 px 和 py 是否指向同一个存储单元
- p==0,表示空指针,这个比较常用
最后
后面的指针数组与指针函数进阶内容,我们下一讲再说。
相关文章
- C语言编程基础入门经典100题(1-10)-简书_c语言简单代码
- R语言中的颜色(三)-grDevice包
- 【说站】java与c语言区别
- c语言从入门到精通开发资源库_php源码建站∶一品资源
- 2022-10-16:以下go语言代码输出什么?A:timed out;B:panic;C:没有任何输出。 package main import ( “con
- 2022-10-02:以下go语言代码能否通过编译?A: 能;B: 不能;C: 不知道。package mainimport (
- SCL语言(入门初级笔记)「建议收藏」
- 计算机如何寻址_PLC编程,如何学习SCL语言?SCL语言编程入门
- Nat Mach Intel|用语言模型进行可控的蛋白质设计
- 小扎亲自演示首个「闽南语」翻译系统!主攻3000种无文字的语言
- 最快下月!地表最强语言模型GPT-4发布在即?CEO暗示:已通过图灵测试
- c语言中‘ ? ’符号是什么意思?
- 【C++ 语言】引用数据类型 ( 引用数据类型定义 | 引用数据类型使用 | 引用类型参数 )
- Go语言flag包:命令行参数解析
- [零] Java 语言运行原理 JVM原理浅析 入门了解简介 Java语言组成部分 javap命令使用详解编程语言
- MongoDB开发:从入门到精通(mongodb开发语言)
- Go语言找出重复行
- Linux下学习C语言:入门指南(linuxc语言学习)
- 语言Linux学习之路:汇编语言入门(linux下汇编)
- Linux下R语言安装流程指南(linuxr安装)
- 操作方法Linux 如何更改语言为中文(linux改成中文的)
- MySQL编程之旅:从入门到精通(mysql 语言)
- c语言操作MySQL数据库的快速入门(c mysql访问库)
- c语言与MySQL结合实现简单1243应用(c mysql 1243)
- 从零开始redis语言入门指南(redis语言入门教程)
- C#语言初级入门介绍
- c语言求1+2+...+n的解决方法
- Go语言入门教程之基础语法快速入门