二维数组 指针的行指针类题目

2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年3月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。字符串二维数组行指针和列指针问题
#include &stdio.h&
void main()
char s[5][80];
scanf("%s", s[0]); //第一处
printf("%s\n", s[0]);
scanf("%s", &s[0]); //第二处
printf("%s\n", s[0]);
第一处和第二处写法不同,得到的结果相同,为什么?
解释:&s[0]
刚好就是行指针s,s和是s[0]他们两个的值(地址)是一样的,所以能把输入的字符串放入同一个内存空间。第一处和第二处起到相同的作用。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。君,已阅读到文档的结尾了呢~~
数组和指针练习题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数组和指针练习题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口二维指针传递
18:30 21人阅读 (0)
再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话:
“[]的优先级高于*”,大家可以带着这句话看下面的~~~
========================
再一次的见证了自己的基础不牢靠。。。幸好发现得早,看见网上说,华为的一个面试题就考了这个方面的。
借那道华为的面试题引出问题,题目:
char **p, a[16][8];&
问:p=a是否会导致程序在以后出现问题?为什么?
可能有一部分朋友会回答正确,这里他们认为,a[]是一级指针,a[][]就是二级指针。那这个到底对不对呢?
OK,用事实说话:
// Author: Tanky Woo
验证二维数组与二级指针的传递问题
#include &iostream&
using namespace std;
void Test(char **p)
cout && p[0][0] && endl;
int main()
char a[2][3];
结果报错:
// error C2664: “Test”: 不能将参数 1 从“char [2][3]”转换为“char
//&&&&&&&&&&&&&&&&&&&&&&&&& 与指向的类型无关;转换要求 reinterpret_cast、C
样式转换或函数样式转换
于是乎,我看了下《C专家编程》里10.5节—:
void fun1(int arr[2][3]);
这种方法导致只能处理2行3列的int型数组。
可以省略第一维的长度。
void fun2(int arr[][3]);
这种方法的限制略微宽松了一些,但是还是只能处理每行是3个整数长度的数组。
函数也可以写成:
void fun2_2(int (*arrr)[3]);
创建一个一维数组,数组中的元素是指向其他东西的指针。也可以说是二级指针。
int fun3(int **arr);
注意:只有把二维数组改为一个指向向量的指针数组的前提下才可以这么做!
#include &iostream&
using namespace std;
void test(char **ptr)
cout && *ptr && endl;
int main()
char *p[3] = {"abc", "def", "ghi"};
在《C专家编程》10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!)
数组和指针参数是如何被编译器修改的?
“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,而不是“指针的指针”:
实参&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
所匹配的形参
数组的数组&&&&&&&&&
c[8][10];&&&&&&&&&&&&&&&&&
(*)[10];&&&&&&&&&
指针数组&&&&&&&&&&&&
*c[10];&&&&&&&&&&&&&&&&&&&&&char
**c;&&&&&&&&&&&&&
&指针的指针
数组指针(行指针)&
(*c)[10];&&&&&&&&&&&&&&&&&&char
(*c)[10];&&&&&&&
指针的指针&&&&&&&&&&
**c;&&&&&&&&&&&&&&&&&&&&&&&&
**c;&&&&&&&&&&&&&&
我在CSDN上专门为这个问题提问过:
最后我总结下讨论结果:
只要实参的类型与形参的类型一致(或可转换)就行。
为什么这么说呢?
piaojun_pj朋友给了一段代码,分析得很给力:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第五章_数组与指针习题.doc 20页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:50 &&
你可能关注的文档:
··········
··········
第五章 数组与指针习题
一、.基本概念与基础知识自测题
5.1 填充题
数组定义时有三个要素:数组名,数组元素的 (1)
和数组元素的 (2) 。按元素在数组中的位置进行访问,是通过 (3) 进行的,称为 (4) 或 (5) 访问。为了使数组声明中数组的大小修改更为方便,总是将 (6) 用于声明数组长度。
答案:(1)类型
(3)下标运算符
(6)常变量
C/C++中的多维数组用的是一个 (1)
的定义,即多维数组的基本定义是
构成的数组,三维数组的元素是
答案:(1)嵌套
(2)以数组作为元素
(3)二维数组
计算机内存是一维编址的,多维数组在内存中的存储 (1) ,C/C++多维在内存中的排列是 (2) 方式,即越 (3) 的下标变化 (4) 。设数组a有m行n列,每个元素占内存u个字节,则a[i][j]的首地址为 (5) + (6)
答案:(1)必须要转化为一维方式,
(2)按行方式
(5)a数组的首地址
(6)(i*n+j)*u
对于多维数组,
的大小是确定的,所谓“不检查数组边界”只是不检查
的边界,而 (3)
的边界是在控制之中的,所以多维数组名作为函数的参数只可以
答案:(1)较低各维的
(2)最高维(第一维)
(3)较低各维
(4)最高维
指针变量保存了另一变量的 (1)值,不可以任意给指针变量赋一个地址值,只能赋给它 (2) 和 (3) 的地址。使用变量名来访问变量,是按 (4) 来直接存取变量称为 (5) 方式;而借助指针变量取得另一变量的地址,访问该变量称为
答案:(1)地址
(3)已经分配了内存的变量的地址
(4)按变量的地址
(5)直接访问
(6)间接访问
固定指向一个对象的指针,称为 (1) ,即 (2) ,定义时const放在 (3) 。而指向“常量”的指针称为 (4) ,指针本身可以指向别的对象,但 (5) ,定义时const放在 (6) 。
答案:(1)指针常量
(2)指针本身是常量
(3)const放在类型说明之后,变量名之前
(4)常量指针
(5)不能通过该指针修改对象
(6)const放在类型说明之前
数组名在表达式中被自动转换为指向 (1) 的指针常量,数组名是地址,但数组名中放的地址是 (2) ,所以数组名 (3) 。这样数组名可以由 (4) 来代替,C++这样做使用时十分方便,但丢失了数组的另一要素 (5) ,数组名是指向数组 (6) 的指针,而不是指向数组
(7)的。编译器按数组定义的大小分配内存,但运行时对 (8) 不加检测,这会带来无法预知的严重错误。
答案:(1)数组第一个元素
(2)不可改变的
(3)称指针常量
(5)数组元素的数量
(8)对数组的边界不加检测
有一个三维数组:
int z3d[2][3][4];
给出指向三维数组第i行第j列第k页元素的指针的三种表达方式 (1) ,
(3) 。再给出这些元素的三种表达方式
答案:(1)z3d[i][j]+k或&z3d[i][j][k]
(2)*(z3d[i]+j)+k
(3)*(*(z3d+i)+j)+k
(4)z3d[i][j][k]或*(z3d[i][j]+k)
(5)*(*(z3d[i]+j)+k)
(6)*(*(*(z3d+i)+j)+k)
物理上,C++是怎样访问数组元素的?请对访问方法作简单介绍。
答:物理上,C++语言的下标运算符[ ]是以指针作为操作数的,a[i]被编译系统解释为*(a+i),即表示为a所指(固定不可变)元素向后第i个元素。无论我们是以下标方式或指针方式存取数组元素时,系统都是转换为指针方法实现。这样做对多维数组尤其方便。
什么是回溯算法?
答:回溯法是对枚举法的一种改进。回溯法的基本思想是,通过对问题的分析找出解决问题的线索,先在一个局部上找出满足问题条件的局部的解,然后逐步由局部解向整个问题的解的方向试探,若试探成功就得到问题的解,试探失败逐步向后退,改变局部解再向前试探。回溯法能避免枚举法的许多不必要的搜索,使问题比较快地得到解决。
用数组名作为函数的参数时,可否加上数组的长度?如果需要加则怎样加?为什么?
答:被调函数中作为形式参数的一维数组不需要说明长度,即使说明了大小也不起作用,因为C++只传递数组首地址,而对数组边界不
正在加载中,请稍后...

我要回帖

更多关于 c 二维数组指针 的文章

 

随机推荐