问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中,关于指针传递的一个问题,求高手解?

发布网友 发布时间:2023-11-28 00:49

我来回答

1个回答

热心网友 时间:2024-10-21 16:34

针就是一种用来存储地址(地址指的就是数据在电脑的存储位置)的数据类型;就如int是存整数的,float,double用来存浮点数一样;

在c语言中,变量的声明格式为 数据类型|数据名|数据

指针也一样

数据类型:根据要取地址的数值的数据的类型,指针有相应的数据类型;

如若要被取地址的是int类型那么

指针就是 int* float 就是float*(类推)

数据名 遵守变量的命名规则即可;

数据:就如前文讲的指针的数据是地址,即数据在电脑中的存储位置,将电脑比作一栋楼,数据比作楼中的房客的话,地址很好理解,最重要的是通过一个数据的地址可以访问到这个数据.在c语言中地址用16进制表示.

&:

{

>_< : 那么如何取得一个数据的地址呢?

^_^ : 用&这个符号,如 int i=9; int* i_p=&i;&是一个一元运算符。他的作用就是取地址。

>_<:那么到底是怎么取地址的呢?电脑在读到&时候发生了什么?

^_^:每一个变量标识符在编译期间,编译器会为它们创建一个符号表,其中存放着变量标识符相应的各种属性,如类型.地址标识等,从这个符号表里找

>_<:那有这么多变量唉....每一个变量都要创建符号表不是很耗内存?电脑又是怎么从这么多变量中找到某个变量的?符号表中这么多数据每个又是存在那的?

=_=||:...........这个嘛.....你猜啊...在c中当定义一个变量并对其取地址的时候电脑发生了什么?

}

指针取地址之后我们称为指针指向某个物体;通过对一个指针*可以获得指针指向的数据的值。

(int i=9;int* i_p=&i;这样i_p就指向i);之后就可以通过*来获取到i的值;

(printf("%d\n%d",*i_p,i))会输出两个一模一样的值,不,该说是输出同一个值两次.仔细分析之.int i;声明变量int整数,分配地址.赋值9,将值9丢到地址中;int* i_p=&i;同样声明变量int指针,分配地址.赋值i的地址,将i地址丢到i_p的地址中.*i_p 就会得到i的值;

i_p:i的地址值;

*i_p:i的值;

&i_p:指针的指针值;

规则;

赋值:

求值:

求指针地址
给指针加上一个整数;(数组有意义)

求差值(数组有意义)

数组与指针;

int num[2]={1,2};

数组名的值也就是数组首个元素的地址值;

即printf("%p\n%p",num,&num[0]);输出是相同的

为什么呢?

当当...这就是指针存在的意义啊.

指针还有一个特性,即指针加上一个数相当于指针的数值+指针所指数据类型的字节数;



int num[2] = { 1, 2 };

printf("%p \n %p \n %d \n%d",num,num+1,*num,*(num+1));

显示为:00D8FD10

00D8FD14

1

2

计算机将数组存储在相邻的内存中,通过指针的这个特性,就可以通过指针的加减来获取数组的值;

比较复杂的是*数组.但是原理还是同上的;

二维数组

int num[2][3]={{1,2,3},{4,5,6}};

数组名是数组首个元素的地址值;

num=&num[0];

但是num[0]同样也是一个数组

num[0]=&num[0][0];

另外二维数组指针的定义与普通指针不同

为什么呢?

因为数据类型不同,而数据类不同就不能正确的使用指针的特性.普通的指针 数据类型为int*每次指针加上一个数就相当于加4.但这样是没有办法通过一个指针获取整个数组所有值的.所以正确的格式是int(*n_p)[3]=num;根据运算符先括号,所以是一个指向每个元素有三个数的数数组的,知道int,知道三个数,那么当n_p+1时加的就是12了,*(n_p+1)就能获取到num的第二个三元素数组的首地址.

对于二维数组来说使用指针获得数组中值的方法是-—num[n][m]=*((n_p+n)+m);

这样就可以使用指针表示变量和数组的值;

而且其是直接访问地址,在使用是直接传递一个地址值通过加减指针使用.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是什么钞票。 请问这是哪个国家的钞票?价值多少人民币?谢谢 快易典学生平板电脑屏幕碎了怎么办,我在书店买的,可以拿到书店修吗... 沧州龟头周围有一圈小肉粒是什么? 快易典学生电脑的屏幕摔坏了,触屏触不了,可以修吗?如果修的话要多少... 西班牙冷汤和哪些菜品搭配更好喝? 西班牙番茄冷汤提示 我想请问你在秦汉胡同学学古筝...一共需要多少钱啊,包括买古筝的钱 word2010如何查看和编辑文档? 胸罩带子老掉,罩杯边有空 安卓版侠盗猎车手圣安地列斯cleo怎么安装2 三星note3圣安地列斯5。0cleo怎么安装 诛仙2飞升具体属性是怎么弄得?1 小石子激起的水花为什么是圆形的?11 诛仙2飞升属性问题25 鼻子上长痘痘是什么原因?310 鼻子上突然长了很多黑头,是因为什么原因? 梦幻西游跑BB环怎么修炼经验不增加3 在当前钢铁行业步入持续寒冬的形势下,职工出现哪些倾向性问题调...2 武汉江夏区有哪些好小学? ...和延边富德队在那个电视频道。每次甘肃卫视上直播? 屌丝是怎样解释的,是褒义还是贬义?7 一年内怎么改第二次 企业开具增值税发票后,次月必须交税吗 圣安地列斯cleo咋安装5 汽车美容包括哪些项目要去学习啊1 学汽修主要学习那些项目 我投下一粒石子,溅起无数漂亮的小水花,像----------...18 学汽修主要学习那些项目 ...//www.abchina.com/cn/ 网站我的电脑为何打不开 显示500 - 内部服 ... ...一名学生喝醉酒打伤致使头部受伤且缝了四针 请问我们应该怎么索赔... 南北朝鲜为什么不互相承认?2 用过六神丸延时17 六年级毕业会写什么作文 谁知道????????????5 ...和手机号,怎么加回?无意中删掉个好友,没有手机号码没有... 六年级毕业作文是什么、?43 癫痫是结节性硬化吗? UPS R系列的7K旁路供电怎么处理 微型继电器(如DC12V的T73型)的外壳是什么工程塑料做的...2 请给位高手,帮忙解决一下这几道高一化学题。如果详细解答更好。尽量多... 会计核算的内容及核算要求是什么?56 诛仙 飞升后有什么好处5 五大银行哪个理财最好?3998 诛仙飞升后有什么好的8 彩色透水地坪分哪种工艺?各有什么优点? 五大银行哪个理财最好?3998 将相和(打一字)43 ...专业,请问考大专填志愿的时候能换成医学大专吗 求一部电视剧,大致是一个警察局每一集介绍破一个案子,各种各样...2 昆明五华区失业保险开始交了吗