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.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
随机推荐
- linux就该这么学,第六天了
今天学了第六天了,主要讲计划任务了,,at,命令,单次有效,一次性的,crontd服务(周期性)计划任务,crontab -e创建,编辑计划任务.crontab -l查看计划任务,crontaab - ...
- db2实现递归调用 机构等树形数据结构形成
WITH n(lev,ID, NAME, PORGID, ORG_ID_TREE) AS (SELECT 0,ID, NAME, PORGID, CAST(ID AS VARCHAR(1024)) F ...
- background-clip 和 background-origin 的区别
background-origin:指定绘制背景图片的起点. background-clip:是对背景图片的剪裁,指定背景图片的显示范围. 1.background-origin:padding | ...
- tomcat的缺少tcnative-1.dll的解决
tomcat启动出现如下问题: The APR based Apache Tomcat Native library which allows optimal performance in produ ...
- kbmmw 5.07 正式发布
来了来了 5.07.00 Dec 9 2018 Important notes (changes that may break existing code) === ...
- Webview窗口设置遮罩层
在Webview窗口中如果存在子Webview的情况下,使用html中的css来做页面遮罩无法覆盖子Webview,为了解决此问题,WebviewStyle对象添加mask属性,用于设置Webview ...
- sql pivot(行转列) 和unpivot(列转行)的用法
1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...
- ota升级动画背景色修改
https://wenku.baidu.com/view/0d63ad25192e45361066f549.html https://blog.csdn.net/huangyabin001/artic ...
- getResource()和getResourceAsStream以及路径问题
用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file ...
- youtube-dl 安装和用法
以windows为例 下载python2最新版本并安装,选择添加到PATH 下载ffmpeg最新版本并解压,在控制面板->高级系统设置->环境变量->PATH里添加解压之后的bin文 ...