c语言中,通过指针引用数组元素?使用方法谁总结出来了

c语言中,通过指针引用数组元素?使用方法谁总结出来了,第1张

同意楼上,其实指针就是数组的首地址,只不过指针加1的含义是移动数组中数据类型的长度而已,比如char p={‘a’,‘b’,‘c’};假设char占一个字节,若p的地址为0x0000,即‘a’所在的地址为0x0000,那么p+1的地址为0x0001,地址中存储的数据为‘b’,获取方法为(p+1),其他类推。同理若int p={1,2,3};假设int占4个字节,若p的地址为0x0000,即1所在的地址为0x0000,那么p+1的地址为0x0005,地址中存储的数据为2,获取方法为(p+1)。不知这个能否能理解。。。

有好几种方法,我稍微说一下,你回去找书看一看:
通过数组首地址 指针 带下标的指针引用一维数组元素
引用一维数组中的某一个元素的方法:
:求当前地址的内容 & :求当前内容的地址
1 ai
2 &ai //在定义语句时代表定义一个指针变量,当在执行语句部分时代表间址运算符,引用一个指针变量指向的地址的内容。&叫求地址运算符,求当前内容的地址。所以和&就像乘号和除号一样,互相抵消了。
3 (a+i):在数组名的地址上,加上i个存储单元。代表第(i+1)个元素,用间址运算符引用它,即等价于a[i]
4 当(p=a;||p=&a0) 则 (p+i)等价于a[i]
5 当(p=a;||p=&a[0]) 则 p[i] 等价于 a[i] //方括号不仅表示数组元素的记方括号不仅表示数组元素的记方括号不仅表示数组元素的记方括号不仅表示数组元素的记号号号号,也是一种运算符也是一种运算符也是一种运算符也是一种运算符
总结:引用一维数组元素 a[i] 的四种方法: a[i] (a+i) 若p=a, 则 p[i] (p+i) 表示a[i]的地址的方法:&a[i] a+i p+i 都表示当前数组第i个元素的地址。
>我不太明白什么叫半个指针的引用,但:
1数据可以引用
2可以通过引用数组名改变任何元素
template< size_t N> //用N我们可以传递任何大小的数组
void change( int (&intarr)[N] ) // intarr就是数组引用,数组的大小为N个元素
{
intarr[0] = 10 ; //通过引用改变元素
}
int main()
{
int arr[20] = { 0 } ;
change( arr ) ; //ok N = 20 ;
int arr2[30] = { 0 } ;
change(arr2) ; // N = 30
int (&ref)[30] = arr2 ;
ref[0] = 10 ; //引用改变元素
}
LZ解决问题的思路很清晰,怎么说自己不灵光呢 你这样的方法很适合编程的

引用其实就是一个变量的别名,实质可理解为指向原变量的一个指针。可以这样想,C语言中没用引用的概念,那它怎么通过调用函数来完成变量的变换勒?答案只有一个:变换地址,方可实现,上面的模板你看成一种数据类型,比如就int,引用是C++的特征之一,但你要知道C++也是从C发展起来的,追根求源嘛,就用指针了,当然用引用也行,其实效果都是一样的。

数组的4种声明方式:

1先声明再初始化

例如:

//1声明

int[] nums;

//初始化

nums = new int[5];

2声明并初始化

例如:

//2声明、初始化

int[] nums = new int[10];

3创建数组同时赋值

例如:

//3创建数组同时赋值

String[] names=new String[]{"大名","小米","夏雨荷"};

int[] ages=new int[]{21,22,21,56,13};

for (int i = 0;i < nameslength;i++){

Systemoutprinrln(names[i]);

}

for (int i = 0;i < ageslength;i++){

Systemoutprinrln(ages[i]);

}

4创建同时赋值,简写,不能写成两条语句

例如:

//4创建同时赋值,简写,不能写成两条语句

String[] cities = {"上海","北京"};

扩展资料:

数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

数组是用于储存多个相同类型数据的集合。

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

#include<stdioh>
main(){
int i,j,k,max_index,n;
struct student{int number;char name[20];int score[3];int sum;}stu[10];
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d %s %d %d %d",&stu[i]number,stu[i]name,&stu[i]score[0],&stu[i]score[1],&stu[i]score[2]);
stu[i]sum=stu[i]score[0]+stu[i]score[1]+stu[i]score[2];
}
max_index = 0;
for (i=0;i<n;i++) if (stu[i]sum > stu[max_index]sum) max_index = i;
printf("%s %d\n",stu[max_index]name,stu[max_index]sum);
return 0;
}

使用for循环语句+文件 *** 作函数即可文件中数据读取并存到数组中。
1、C语言标准库提供了一系列文件 *** 作函数。文件 *** 作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdioh头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件 *** 作位置的获取与设置。一般的C语言教程都有文件 *** 作一章,可以找本教材进一步学习。
2、例程:
#include<stdioh>
int i,a[100];
int main(){
FILE fp1 = fopen("inputtxt", "r");//打开输入文件
FILE fp2 = fopen("outputtxt", "w");//打开输出文件
if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出
puts("不能打开文件!");
rturn 0;
}
for(i=0;fscanf(fp1,"%d",a+i)!=EOF;i++);//从输入文件连续读取整数到数组a
for(;i--;)fscanf(fp2,"%d ",a[i]);//把数组a逆序写入到输出文件当中
fclose(fp1);//关闭输入文件
fclose(fp2);//关闭输出文件,相当于保存
return 0;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13384135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存