C语言指针基本操作
C语言指针基本操作
指针介绍
如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了。
众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问。指针是一个变量,它的值是一个变量的内存地址【注意是内存地址】。
指针表达式:
type *var-name;
//其中type代表C语言的数据类型,例如:int,double,char,float
指针
指针声明
指针进行声明时,
=的右边必须为内存地址,不可以是变量(但是int*p=0;除外,该语句表示指针为空)指针初始化
在初始化指针的时候,如果暂时不需要赋值,可以将值赋值为NULL,可称为
空指针。ps: *不赋值NULL也行,不过赋值NULL是一种好习惯,但是如果定义指针数组,大可不必这样。
指针最基本使用
首先先介绍一下指针最基本最基本的使用
#include <stdio.h>
void main(){
int a = 10;
int *p =NULL; //如果将其写成 int *p = 10;那么程序肯定会报错,但是如果写成 int *p = 0,不会报错
printf("指针赋值前的地址:%p\n",p);
printf("变量a的地址:%p\n",&a);
p = &a;//将变量a地址赋值给指针
printf("指针赋值后的地址:%p\n",p);
printf("指针访问值:%d\n",*p);
}
输出结果是:
指针赋值前的地址:(nil)
变量a的地址:0x7ffef9a9655c
指针赋值后的地址:0x7ffef9a9655c
指针访问值:10
ps:(nil)就代表空的意思,不同的编译器显示不同。
解释一下原理
可以简单的理解为:
如果在*p中,p代表一个内存地址,而这个内存地址中储存了一个值,那么使用*可以将这个值取出来,则*p就代表这个内存地址中的值。
例如:
#include <stdio.h>
void main(){
int a = 10;
printf("结果是:%d",*(&a));
}
运行结果:
结果是:10
指针的基本应用
指针与数组不可说的秘密
简单点来说,指针跟数组没有半毛钱关系。只是说,经常将指针和数组拿过来共同使用,于是乎,两者便有了点关系。
指针数组
指针数组定义与数组定义类似
int a[10];//定义一个数组
int *p[10];//定义一个指针数组
使用案例:
#include <stdio.h>
void main()
{
int a[] = {10,20,30};
int *p[3]; //此时不要写成 int *p[3] =NULL;
for(int i =0;i<3;i++){
p[i] = &a[i]; //对指针数组元素进行赋值
}
for(int j=0;j<3;j++){
printf("第%d个值是%d\n",j,*p[j]);
}
}
运行结果:
第0个值是10
第1个值是20
第2个值是30
指针与数组
首先先说一下指针运算
指针运算有点奇葩,和平常的有点不一样。假设
ptr是一个指向int32位整数类型的指针,所指的地址是100,那么执行ptr++
所得到结果是ptr将指向104
对指针进行自加自减的操作,所加或者所减的值会根据数据类型而不同,可知,char类型的指针自加自减的值为1指针指向数组
int var[]={10,20,30};
int *p = NULL;
//将p指向数组的首个元素地址
p = var;
//等价于
p = &var[0];
指针和数组
#include <stdio.h> void main(){
int var[] = {10,20,30};
int *p;
p = var; //也可写做 p = &var[0];
for(int i = 0;i<3;i++){
printf("p所指向的地址:%p\n",p);
printf("p所指向的值:%d\n",*p);
p++;
}
}
运行结果
p所指向的地址:0x7fff9aa44a2c
p所指向的值:10
p所指向的地址:0x7fff9aa44a30
p所指向的值:20
p所指向的地址:0x7fff9aa44a34
p所指向的值:30
emm,简单的指针的使用就介绍到这里了,在下一篇中,我将会再介绍一下指针的其他操作

C语言指针基本操作的更多相关文章
- C语言指针的高级操作
C语言指针的高级操作 指针 指针 在上篇博客中我介绍了C语言指针的最基本操作,那么我在这篇博客中会介绍一下C语言指针的一些骚操作. 指向指针的指针 这名字乍一听有点拗口,再次一听就更加拗口了.先看定 ...
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C语言指针学习
C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 关于C语言指针的问题
在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
随机推荐
- 学生管理系统(Java Swing JDBC MySQL)
该系统使用 Java Swing.JDBC.MySQL 开发 开发环境 Eclipse.WindowBuilder JDK版本:1.8 代码在百度网盘中(176***5088) 目录结构如下 Data ...
- windows平台下的oracle ORA-01031的解决方法
今天下午遇到一个很怪异的问题,在windows平台下sqlplus / as sysdba登陆数据库,提示权限不足, 当时就纳闷了,sys用户登陆数据库还能权限不足,问题出现了,就开始寻找解决方法呗 ...
- Python 多进程编程之 进程间的通信(Queue)
Python 多进程编程之 进程间的通信(Queue) 1,进程间通信Process有时是需要通信的,操作系统提供了很多机制来实现进程之间的通信,而Queue就是其中的一个方法----这是操作系统开辟 ...
- python中for循环的三种遍历方式
#!/usr/bin/env python# -*- coding: utf-8 -*-if __name__ == '__main__': list = ['A', 'B', 'C', 'D'] # ...
- HTML-表格-列表-结构标记-表单
1.表格 1.表格语法 1.标记 1.表格 <table></table> 2.行 <tr></tr& ...
- linux 查看机器cpu核数
CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看CPU信息(型号) [root@AAA ~]# cat /p ...
- s3 Docker的镜像和容器
Docker技术里最为基础的两大概念:镜像和容器.镜像的 获取方式:从registry拉取,从Dockerfile构建:容器的基本操作 1 Docker架构和底层技术简介 Docker Platfor ...
- SDWebImage之SDImageCache
SDImageCache和SDWebImageDownloader是SDWebImage库的最重要的两个部件,它们一起为SDWebImageManager提供服务,来完成图片的加载.SDImageCa ...
- Visual Studio 2015 将json转换为实体类
最新写的一个接口需要接收json参数,然后序列化为实体类然后再进行后面的逻辑处理.因为json中键值对比较多,逐一去手写实体中的每个属性太麻烦,于是寻思是否有这样的工具可以将json转换为实体类. 经 ...
- WHU1124 Football Match
http://acm.whu.edu.cn/learn/problem/detail?problem_id=1124 题目大意:有N支球队,你们是第N支.每个队伍已经有一些分数了,接下来还有M场比赛. ...