为什么c语言精髓 指针,(C语言)精髓——指针

(1)作用:正确而灵活的运用指针,能够有效的表示复杂的数据结构,能动态分配内存,方便地使用字符串,有效而方便地使用数组,可以直接处理内存单元地址。

(2)概念:①变量的指针:变量(3)的地址。(2000)

②指针变量:存放变量地址的(即指针)的变量。(i_pointer)

如图所示:

b8e7a0561ccab7b26ae327caa7cf3daa.png

(3)为了表示指针变量与它所指变量之间关系,在程序中就出现了用户“*”符号表示指向的对象。(*i_pointer-->i,*i_pionter与i所表示的意思是相同的)

注意:变量的类型与指针变量的类型必须相同。(int i与int i_pointer都是int型)

(4)指针的移动:“指针+1”所移动的字节由指针的类型决定。(int i_pointer,移动字节为4个字节)

(5)指针变量引用:①&:取地址运算符。(取地址)

②*:指针运算符,取指针所指向对象的内容。(取内容)

(6)“&”与“*”为同优先级运算符,按从右到左的顺序①&*pointer的含义:意思是先运算*i_pointer-->i,再执行一个&运算,可得到&*i_pointer-->&i。

②*&a的含义是:&a-->i_pointer,  *&a-->*i_pointer,  *i_pointer-->a,  *&a-->a。

练习题:

编写一个函数实现两个数的交换:

#include

int main()

{

void swap(int x,int y);

,b=;

swap(a,b);

printf("%d %d\n",a,b);

}

void swap(int x,int y)

{

int t;

t=x;

x=y;

y=t;

}

结果如图所示:

3e549b4382c032334cb0753ebeae48c7.png

原因分析:函数中的交换仅仅是X,Y中数值的交换,而没有改变a,b中的数值。原理如图所示:

3fadecf6e5d504da8b913cf0e115ca8e.png

正确代码如下:

#include

int main()

{

void swap(int x,int y);

,b=;

swap(a,b);

}

void swap(int x,int y)

{

int t;

t=x;

x=y;

y=t;

printf("%d %d\n",x,y);}

分析原因:改变的仅仅是X,Y中的内容,而没有改变a,b中的内容。

正确运用指针,交换a,b中内容方式如下:

#include

int main()

{

void swap(int *x,int *y);

,b=;

int *x,*y;

x=&a,y=&b;

swap(&a,&b);

printf("%d %d\n",a,b);

printf("%d %d\n",*x,*y);

}

void swap(int *x,int *y)

{

int t;

t=*x;

*x=*y;

*y=t;

}

#include

int main()

{

void swap(int *x,int *y);

,b=;

int *x,*y;

x=&a,y=&b;

swap(&a,&b);

printf("%d %d\n",a,b);

printf("%d %d\n",*x,*y);

}

void swap(int *x,int *y)

{

int *t;/*定义一个指针变量*/

t=x;/*交换的仅仅是x,y中的地址*/

x=y;

y=t;

printf("%d %d\n",x,y);/*输出的是X,Y的地址*/

}

11ba7410c5dd62c56c692e021ed27cc2.png

分析错误原因:地址交换,交换的仅仅是x,y中的地址。而a,b中的内容没有改变。

错误例子:

#include

int main()

{

void swap(int *x,int *y);

,b=;

int *x,*y;

x=&a,y=&b;

swap(&a,&b);

printf("%d %d\n",a,b);

printf("%d %d\n",*x,*y);

}

void swap(int *x,int *y)

{

int *t; /* *t没有指向对象 */

*t=*x;

*x=*y;

*y=*t;

}

分析错误原因:*t没有指向对象,因此*t地址会随机选择,会出现危险动作。

结果如图所示:

1a92b88eb0b1c38de1d385450f6b0a7c.png

浅谈c语言的指针

对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

C语言二重指针与malloc

(内容主要源于网上,只是加入了些自己的剖析) 假设有一个二重指针: char **p; 同时有一个指针数组 char *name[4]; 如何引用p呢? 首先我们有程序代码如下 #include &l ...

C语言函数指针基础

本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

试读《JavaScript语言精髓与编程实践》

有幸看到iteye的活动,有幸读到的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...

为什么C/C++语言使用指针

这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...

C语言的指针变量

C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

《JavaScript语言精髓与编程实践》读书笔记

JavaScript语言精髓与编程实践读书笔记 function v1(v1){ v1 = 100; alert('v1:'+v1); } function v2(name){ v1.apply(th ...

Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

随机推荐

lua的table表处理 及注意事项

lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的: 下面是大牛 云风的一片关于lua table的blog,可使得对lua ta ...

java.lang.OutOfMemoryError: PermGen space及其解决方法(转载)

java.lang.OutOfMemoryError: PermGen space及其解决方法 分类: java2007-09-11 12:34 162242人阅读 评论(51) 收藏 举报 gene ...

KMP笔记√//找最大子串,前缀自匹配长度

假设s1里找s2,然后s2进去匹配假设在第三位失配那么说明前两位是匹配成功的 如果这时候将s2后移一位相当于将s2的第一位和s2的第二位比较,如果我们已知s1(1)≠s1(2)那么就可以直接后移两位 ...

Knockoutjs官网翻译系列(三) 使用Computed Observables

书接上回,前面谈到了在视图模型中可以定义普通的observable属性以及observableArray属性实现与UI元素的双向绑定,这一节我们继续探讨第三种可实现绑定的属性类型:computed o ...

jquery1.7.2的源码分析(五)$.support

$.support 的英文注释很详细的介绍的这里,就稍微的写了下 Query.support = (function() { var support, all, a, select, opt, inp ...

将宿主机东西拷贝到dokcer容器中去

1,获取容器名称或者id : docker ps 2,获取整个容器的id,其实键盘tag就可以补全的. docker inspect -f  '{{.Id}}'  步骤A获取的名称或者id 3,在主机 ...

mysql 查询重复的(不区分大小写)数据的SQL优化

在mysql中查询不区分大小写重复的数据,往往会用到子查询,并在子查询中使用upper函数来将条件转化为大写.如: select * from staticcatalogue WHERE UPPER( ...

设备文件三大结构:inode,file,file_operations

驱动程序就是向下控制硬件,向上提供接口,这里的向上提供的接口最终对应到应用层有三种方式:设备文件,/proc,/sys,其中最常用的就是使用设备文件,而Linux设备中用的最多的就是字符设备,本文就以 ...

NYOJ--1058--dfs--部分和问题

/* Name: NYOJ--1058--部分和问题 Author: shen_渊 Date: 15/04/17 19:27 Description: 简单的DFS,以为马上过的,递归的i+1写错了, ...

springBoot于tomcat7搭建websocket服务

最近在项目中需要服务端进行推送服务,于是决定使用webSocket进行双向通讯.刚开始觉得应该没问题,参考网上的博客进行开发配置.我们的开发环境使用的是springBoot.tomcat7.servl ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值