精华内容
下载资源
问答
  • 这类题型比较抽象,所以我们直接来学用法,当我们这样定义一个指向二数组行变量的指针((*p)[列]),并且将它与某一个二数组相关联以后(p=二数组名+某n),我么可以写成这样:*(*(p+i)+j)=二数组名[n+i][j]...

    六、指针变量指向二维数组的行变量

    这类题型比较抽象,所以我们直接来学用法,当我们这样定义一个指向二维数组行变量的指针((*p)[列数]),并且将它与某一个二维数组相关联以后(p=二维数组名+某数n),我么可以写成这样:*(*(p+i)+j)=二维数组名[n+i][j]

    我么举个例子:

    int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int (*p)[4];
    p=a+1;

    定义一个三行四列的二维数组,再定义一个指向行变量的指针,然后让指向行变量的指针与二维数组的某一行相关联(指针=数组名+某数n),如果 指针=数组名+0,就代表指针指向数组的第一行;如果 指针=数组名+1,就代表指针指向数组的第二行;同理,指针=数组名+2,就代表指针指向数组的第三行。所以,上面语句p=a+1,就是让指针指向第二行。当指针p指向的是第二行的话,指针p-1就是指向第一行,指针p+1指向第三行。

    此时,我们把它行的指针拿到前面来,然后后面用[0],[1],[2],[3]。这个时候,(p-1)[0]代表的就是a[0][0]的地址,(p-1)[1]代表的就是a[0][1]的地址,p[1]代表的就是a[1][1]的地址,(p+1)[1]代表的就是a[2][1]的地址。

    其实,相较于(p-1)[0]这种地址的描述方法,更常见的是这种描述方法(下图中蓝色字体部分):

    方法就是:把中括号前面的部分拿出来,在前面加上一个*号;然后,中括号里面的数字是几,就在它们的后面加上几。

    所以,当我们定义了一个指向行的指针,并且让指针与某行相关联的时候,同时我们也得到了里面每一个元素的地址。前面已经讲过了,当我们要表示一个指针的值的时候,我们只需要把指针拿过来,在前面加上一个*号就可以了。所以,当我们要表示a[1][2]的值的时候,我们首先找到a[1][2]对应的指针,也就是*p+2,然后在前面加上一个*号,就能代表这个指针对应的值,也就是a[1][2]的值(a[1][2]=*(*p+2))。这个列子,就是性质*(*(p+i)+j)=二维数组名[n+i][j]的意思。接下来我们做一道题:

    #include<stdio.h>
    
    int main()
    {
    	int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    	int (*p)[3];
    	p=a;
    	int i,j,hang,lie;
    	printf("请输入行数与列数:\n");
    	scanf("%d,%d",hang,lie);
    	i=hang-1;
    	j=lie-1;
    	printf("%d行%d列的元素为:%d\n",hang,lie,*(*(p+i)+j));//*(*(p+i)+j)就是a[i][j]
    	
    	return 0;
    }

    七、用指向二维数组行变量的指针做形参

    方法就是卡以下两步:

    1. 函数声明:数组名[][某数] 改成 (*p)[某数]
    2. 函数解释:数组名[i][j] 改成 *(*p+i)+j)

    例1:有3名学生学习4门课,学生一的成绩分别是65,67,70,60。学生二的成绩分别是80,87,90,81。学生三的成绩分别是90,99,93,98。将上述成绩输入二维数组,并通过函数输出第2个学生的各科成绩。

    #include<stdio.h>
    
    int main()
    {
    	void shuchu(float (*p)[4],int n);//原来为float a[][4]
    	float fenshu[3][4]={{65,67,70,60},{80,87,90,81},{90,99,93,98}};
    	shuchu(fenshu,2);
    	
    	return 0;
    }
    
    void shuchu(float (*p)[4],int n)//原来为float a[][4]
    {
    	int i;
    	printf("第%d个学生的各科成绩是\n",n);
    	for(i=0;i<=3;i++)
    	{
    		printf("%f\t",*(*(p+n-1)+i));//原来为a[n-1][i]
    	}
    	printf("\n");
    }

    八、指针变量与字符串

    其实字符串就是一个一维数组,所以指针与字符串的用法和指针与一维数组的用法是完全一样的。

    1. 指针=&数组名[某数]
    2. *指针=指针指定的字符
    3. 指针+i=&数组名[某数+i]

    并且,前面讲一维数组时,也讲过以下两种形式。这种在指针指向一维数组可以应用的规律,依然可以在指针指向字符串时应用:

    1. &数组名[某数] 相当于 数组名+某数
    2. 数组名[某数] 相当于*(数组名+某数) 

    例:定义字符串a为“I am shuaibi!”,将其赋值到字符串b里,并输出字符串b。

    #include<stdio.h>
    
    int main()
    {
    	int i;
    	char a[],b[10086],*p,*q;
    	a[]={'I','','a','m','','s','h','u','a','i','b','i','!'};
    	p=a;
    	q=b;
    	for(i=0;*(p+i)!='\0';i++)
    	{
    		*(q+i)=*(p+i);
    	}
    	*(q+i+1)='\0';
    	printf("字符串b是:\n");
    	for(i=0;*(q+i)!='\0';i++)
    	{
    		printf("%c",*(q+i));
    	}
    	printf("\n");
    	
    	return 0;
    }

    九、指针变量与字符串相关函数

    指针变量与字符串相关函数的用法和指针变量与一维数组相关函数的用法是完全一样的。

    1. 函数声明:数组名[] 改成 *p
    2. 函数解释:数组名[i] 改成 *(p+i)
    3. 函数使用:数组名 改成 q(使用前需先关联)

    例:定义字符串a为“I am shuaibi!”,将其赋值到字符串b里,并输出字符串b。请调用函数编写此程序。

    #include<stdio.h>
    
    int main()
    {
    	void fuzhi(char *yuanlaidep,char *xindep); 
    	char b[10086],*yuanlaideq,*xindeq;
    	yuanlaideq="I am shuaibi!";
    	xindeq=&b[0];
    	printf("字符串b是:\n");
    	fuzhi(yuanlaideq,xindeq);
    	for(i=0;*(xindeq+i)!='\0';i++)
    	{
    		printf("%c",*(xindeq+i));
    	}
    	printf("\n");
    	
    	return 0;
    }
    
    void fuzhi(char *yuanlaidep,char *xindep)
    {
    	int i;
    	for(i=0;*yuanlaidep,char *xindep)
    	{
    		*(xindep+i)=*(yuanlaidep+i);
    	}
    	*(xindep+i+1)='\0';
    }

    十、返回指针值的函数

     在之前的学习过程中,如果函数是有返回值的,一般都是返回某一个数字。我们要返回某一个内容,就在函数的解释里用return加上某一个内容。其实函数return过来的也可以是一个地址,也就是一个指针。

    例:有3名学生学习4门课,学生一的成绩分别是65,67,70,60。学生二的成绩分别是80,87,90,81。学生三的成绩分别是90,99,93,98。用指针函数来编程,要求用户输入学生序号以后,能输出该学生的各科成绩。

    #include<stdio.h>
    
    int main()
    {
    	float *chazhao(float (*hang)[4],int n);
    	float a[3][4]={{65,67,70,60},{80,87,90,81},{90,99,93,98}};
    	float *p;
    	int xuhao,i;
    	printf("请输入学生序号:");
    	scanf("%d",&xuhao);
    	printf("第%d名学生的成绩:\n",xuhao);
    	p=chazhao(a,xuhao-1);
    	for(i=0;i<=3;i++)
    	{
    		printf("%f\t",*(p+i));
    	}
    	printf("\n");
    	
    	return 0;
    }
    
    float *chazhao(float (*hang)[4],int n)
    {
    	int *q;
    	q=(hang+n)[0];
    	return(q);
    }

    十一、指针与一维二维数组的数值关系

    一般来说我们都明白以下两点:

    1. 指针=&值
    2. 值=*指针

    但有些时候,不一定是这样写,而是采用了一些简便写法。简便写法写起来不要用&和[],是比较省事的。但这时候读起程序来就比较费劲了。其实简便写法的规律就是以下两条:

    1. &a[i]=a+i
    2. a[i]=*(a+i)
    展开全文
  • (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿以内的数字转换成文本文字(4KB) 640,o012.zip 十进制转换成罗马数字(1KB) 641,...
  • (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿以内的数字转换成文本文字(4KB) 640,o012.zip 十进制转换成罗马数字(1KB) 641,...
  • (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿以内的数字转换成文本文字(4KB) 640,o012.zip 十进制转换成罗马数字(1KB) 641,...
  • (28KB) 637,o015.zip 计数器(10KB) 638,o014.zip 文件加密/解密的例子 (345KB) 639,o013.zip 将十亿以内的数字转换成文本文字(4KB) 640,o012.zip 十进制转换成罗马数字(1KB) 641,...
  • 在一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    对 C++ 来说,前面例子中 Date 类的属性就是 day、month 和 year,而你添加了 Get 和 Set 方法。C# 提供了一种更加便捷、简单而又直接的属性访问方式。 所以上面的类应该写成这样: 复制内容到剪贴板 代码: using ...
  •  《数据挖掘导论(完整版)》全面介绍了数据挖掘,涵盖了五个主题:数据、分类、关联分析、聚类和异常检测。除异常检测外,每个主题都有两章。前一章涵盖基本概念、代表性算法和评估技术,而后一章讨论高级概念和算法...
  • 7.1.3 维数灾难 7.1.4 习题 7.2 层次聚类 7.2.1 欧氏空间下的层次聚类 7.2.2 层次聚类算法的效率 7.2.3 控制层次聚类的其他规则 7.2.4 非欧空间下的层次聚类 7.2.5 习题 7.3 k-均值算法 7.3.1 k-均值算法...
  • 7.1.3 维数灾难 7.1.4 习题 7.2 层次聚类 7.2.1 欧氏空间下的层次聚类 7.2.2 层次聚类算法的效率 7.2.3 控制层次聚类的其他规则 7.2.4 非欧空间下的层次聚类 7.2.5 习题 7.3 k-均值算法 7.3.1 k-均值算法...
  • 8 函 8.1 概述 98 8.2 函数定义的一般形式 99 8.3 函数的参数和函数的值 100 8.3.1 形式参数和实际参数 101 8.3.2 函数的返回值 102 8.4 函数的调用 106 8.4.1 函数调用的一般形式 106 8.4.2 函数调用的方式 106 ...
  • 8 函 8.1 概述 98 8.2 函数定义的一般形式 99 8.3 函数的参数和函数的值 100 8.3.1 形式参数和实际参数 101 8.3.2 函数的返回值 102 8.4 函数的调用 106 8.4.1 函数调用的一般形式 106 8.4.2 函数调用的方式 106 ...
  • excel的使用

    2012-11-25 17:06:01
    实际输入的时候,通常应用等差数列输入法,先输入前二个值,定出自变量中之间的步长,然后选中A2和A3两个单元格,使这二项变成一个带黑色边框的矩形,再用鼠标指向这黑色矩形的右下角的小方块“■”,当光标...
  • c++ 程序设计

    2019-01-20 22:53:37
    《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容...
  • 4.4 核对矩阵的维数(Getting your matrix dimensions right) 4.5 为什么使用深层表示?(Why deep representations?) 4.6 搭建神经网络块(Building blocks of deep neural networks) 4.7 参数VS超参数...
  • LINGO软件的学习

    2009-08-08 22:36:50
    显然,这对模型的维护和维数的缩放非常便利。 数据部分以关键字“data:”开始,以关键字“enddata”结束。在这里,可以指定集成员、集的属性。其语法如下: object_list = value_list; 对象列(object_list)包含要...
  • 高级Shell脚本编程

    2013-10-28 10:08:19
    使用awk来产生伪随机 9-31. C语言风格的变量操作 10-1. 一个简单的for循环 10-2. 每个[list]元素中都带有两个参数的for循环 10-3. 文件信息: 对包含在变量中的文件列表进行操作 10-4. 在for循环中操作文件 ...
  • 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二表格形式)。常见的有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,...
  • 第五部分显示了两个应用C++和面向对象编程的实际例子。 本书内容全面、翔实,是学习C++编程语言的广大学生的一部有用的工具书,也是对C++感兴趣的读者的必备参考书。 第一部分 C++基础:C子集 第1章 C语言概述 1.1...
  • 实例133 二数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 检测数组中是否存在某个值 163 实例136 获取数组中的当前单元 164 实例137 从数组中随机取出元素 165 实例138 合并数组 166 实例139 拆分...
  • 实例133 二数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 检测数组中是否存在某个值 163 实例136 获取数组中的当前单元 164 实例137 从数组中随机取出元素 165 实例138 合并数组 166 实例139 拆分...

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

关联维数例子