c语言指针数组的赋值与引用

8951
回复
39205
查看
    [复制链接]

 成长值: 9623

等级头衔

头衔 官方人员

Rank: 120Rank: 120Rank: 120Rank: 120

积分成就
UID
10
威望
5071
贡献
5046
在线时间
17 小时
注册时间
2014-2-25

VIP会员生肖兔勋章

发表于 2023-11-24 08:23:56 | 显示全部楼层 |阅读模式
编程交流
编程交流: c语言数组指针引用
请问在C语言中,函数传参时怎样利用指针传递数组
u=693372803,2878917619&fm=253&fmt=auto&app=138&f=PNG.webp.jpg
因为第三条,当把数组名作为函数的形参进行传递时,该效果等同于传递一个同类型的指针。直接在程序当中调用 函数名(数组名)即可。
数组在C++中是以指针的形式进行传递的。我们可以把形参写成指针形式,也可以写成数组形式,但本质上传递的都是指针。
a是指针数组,元素是char指针 ,数组传递的时候编译器只会传递数组地址,也就是a的地址,是指针数组的地址。进入函数时,复制了份指针数组的地址,而不是数组本身。
完全无法按值传递。这是由C/C++函数的实现机制决定的。下一个问题是:为什么偏要按值传递呢?当要在一个函数内使用一个数组时,传一个指针进去不就行了?只要能访问到我们所要的数据并对其进行操作,何苦钻牛角尖。
结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。
你可以这么理解 * p[3]表达的是一个数组指针,这个指针 p[0]表示的是数组存的第一个地址。而数组实际上是一串连续地址的块。每一个小块存着一个内容。
655fd97a3d83c.jpg

c语言指针引用数组元素,从p=a开始解释下此程序
1、p=a; //使int*指针p指向数组a的首元素,即a[0]的地址—&a[0]。
2、C,先看p+2,代表指针p后面偏移两个整形数储存空间以后的地址,所以p+2代表的是a[0]偏移2以后(是a2)的地址,而*是取值运算,所以*(p+2)就代表了a[2]的值,所以能正确的代表元素a[2],所以C选项是正确的。
3、首先你要明白一点,数组名和指针本质上是一回事,都是地址,该数组的首地址。知道这一点后就可以活学活用了。这是c语言的精髓。
4、(*p)[4]代表的是int型数组指针,步长是(4 sizeof(int))。首先说明的是对于第7行程序打印的结果不是a[3]对应的值,这样的操作属于越界(即访问到数组外的内存)。
C++指针、数组、引用、变量作函数参数的问题
原因:sum的初始化为0,也就是令sum等于0,防止下面使用的时候,sum是一个不可预料的值。常量其值不可改变,符号常量名通常用大写。变量是以某标识符为名字,其值可以改变的量。
在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的指针。
要改变一个变量的值,到主调函数中也生效,那就必须穿地址(传指针), 否则不行。不过 并不是指针类型就可以,而必须是要修改类型的指针。
同样,指针变量的值也是地址,数组指针变量的值即为数组的首地址,当然也可作为函数的参数使用。归纳起来,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下4种:形参和实参都是数组名。
这道题刚刚做到了,正确答案是c 牛客网大佬给出的解A,必须在主调函数中说明此数组的大小,不一定例如传递一个char类型的字符串,就不需要。
你想得到的结果是最高分和学号,程序只能返回其中一个。你也可以定义pmaxScore存储求出来的最高分。
求c语言指针方式引用二维数组问题
int (*p)[n]; p为指向整型二维数组的指针变量,二维数组的列数为n 展开 tdfzq | 发布于2011-07-10 举报| 评论 0 0 指针是C语言的精髓,学好C语言必须得学好指针!祝你学业有成!**p是二级指针。(*P)[ ]是数组指针。
a[0]代表第一组首元素地址,当然,a[0]也指向数组首元素的地址,a[0]=&a[0][0];a是对a取值,它取出的是a[0],当然=&a[0][0];&a[0]指a[0]的地址,还是它自己,所以&a[0]=&a[0][0]。
二维数组就是数组的数组,二维数组即数组的元素是一维数组的数组。那么我们要用指针指向二维数组,就是要定义一个指向数组的指针了。
C语言中指针和引用的区别
指针的定义:指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针是一个存储计算机内存地址的变量。从指针指向的内存读取数据称作指针的取值。指针可以指向某些具体类型的变量地址,例如int、long和double。指针也可以是void类型、NULL指针和未初始化指针。
若说C语言中指针有什么特别的地方他和C++区别有以下几点供参考 1)引用必须被初始化,指针不必。2)引用初始化以后不能被改变,指针可以改变所指的对象。3)不存在指向空值的引用,但是存在指向空值的指针。C++中尽量用引用。
指针、数组作为参数,这是地址传递,指针和数组可以看成是指向一个或一片连续空间的指针(区别是:一个为变量地址,一个常量地址),它们传递的是所指数据或数据区的地址,这使得函数直接操作的就是原数据区的数据。
表示定义了一个指向sqlist类型的指针 &L 表示L的指针 L-num[]这儿的L定义为:sqlist *L,而L.num[]这儿的L定义为struct sqlist L。
C语言关于数组元素引用的问题,谢谢达人!
C语言规定只能逐个引用数组元素,而不能一次引用整个数组。对于字符数组,可以将整个字符串一次输入或输出。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。
int a[5],*p=a+1,声明了一个int数组a[5],然后声明了一个int指针p,*p=a+1中的a表示数组a[5]中a[0]的地址,a+1表示a[0]地址往后移动一位,也就是a[1]的地址,*p=a+1表示指针p指向了a[1]。
如果对static型数组不赋初值,系统会对定义的所有数组元素自动赋以0值。 (4)在对全部数组元素赋初值时,可以不指定数组长度。
大数组初始化麻烦。引用在定义时必须初始化。若数组元素是引用的话,则必须对每个元素进行初始化。破坏数组元素的内存存放连续性。

欢迎加入学客联盟
等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4656333
威望
103
贡献
103
在线时间
0 小时
注册时间
2022-1-28

发表于 2023-11-24 08:23:56 | 显示全部楼层
学习永无止境啊
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 中级会员

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

积分成就
UID
5218980
威望
82
贡献
82
在线时间
0 小时
注册时间
2022-4-8

发表于 2023-11-24 08:23:56 | 显示全部楼层
好的
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
6193793
威望
90
贡献
90
在线时间
0 小时
注册时间
2023-7-14

发表于 2023-11-24 08:23:56 | 显示全部楼层
永远的神啊
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4660855
威望
93
贡献
93
在线时间
0 小时
注册时间
2022-1-28

发表于 2023-11-24 08:24:03 | 显示全部楼层
不经意期间,我又学习到一个技能了
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 中级会员

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

积分成就
UID
5989268
威望
72
贡献
72
在线时间
0 小时
注册时间
2023-6-6

发表于 2023-11-24 08:24:03 | 显示全部楼层
路过看看,默默留下脚印
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 中级会员

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

积分成就
UID
5484883
威望
74
贡献
74
在线时间
0 小时
注册时间
2022-5-1

发表于 2023-11-24 08:24:10 | 显示全部楼层
大家来看看。
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 中级会员

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

积分成就
UID
6235910
威望
79
贡献
79
在线时间
0 小时
注册时间
2023-8-7

发表于 2023-11-24 08:24:10 | 显示全部楼层
非常喜欢哦
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 高级会员

Rank: 35Rank: 35Rank: 35Rank: 35Rank: 35

积分成就
UID
4615520
威望
85
贡献
85
在线时间
0 小时
注册时间
2022-1-22

发表于 2023-11-24 08:24:18 | 显示全部楼层
不经意已经在这里学习好多内容了
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

等级头衔

头衔 中级会员

Rank: 25Rank: 25Rank: 25Rank: 25Rank: 25

积分成就
UID
5787033
威望
82
贡献
82
在线时间
0 小时
注册时间
2022-6-15

发表于 2023-11-24 08:24:25 | 显示全部楼层
学到老,好东西留在手中
欢迎加入学客联盟
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电脑技术交流学习
132-3591-5703
周一至周五 9:00-18:00
意见反馈:admin@cnxklm.com

扫一扫访问手机版

Powered by NST! X3.4© 2001-2021技术支持( 闽ICP备14006427号 闽公网安备35090202000370号)|意见建议