为什么java中char型数组元素没有string赋值给char数组初始化的元素值是a???

网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&&>>&正文
通过PHP current函数获取未知字符键名数组第一个元素的值
关于current()函数: 每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。用current()获取。 类似函数: end() 将array的内部指针移动到最后一个单元并返回其值。 next()返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回FALSE。 prev()返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回FALSE。 reset() 将array的内部指针倒回到第一个单元并返回第一个数组单元的值,如果数组为空则返回FALSE。 看下面PHP案例:. 代码如下: &?php $arr = array("a"=&"php","java","c"); echo current($arr); //php echo next($arr); //java echo prev($arr); //php 指向上一单元的值,所以又为php了 echo end($arr); //c ?&
很好用且很有用的几个php函数,反正我是记住了。
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]在JAVA中申明了一个二维数组为全局变量没有初始化,在后面要怎么为它赋值,求大神指教_百度知道
在JAVA中申明了一个二维数组为全局变量没有初始化,在后面要怎么为它赋值,求大神指教
public class Test{
static int[ ][ ]
public static void main(string[ ] args){
j&num[&quot.length,{1;j++){if(t&lt,{1,3};][&quot,2};int t=num[0][0].+x+&i&]&quot.num[i],8}},2;x=i,2,3};}}}Snum[i][j]){t=num[i][j];y=i;+y+&quot,{1,{1;for(int i=0;int y=0;int x=0;i++){for(int j=0public static void main(String[] args) {int[][]num={{1.println(&+t),2}
其他类似问题
二维数组的相关知识
按默认排序
其他1条回答
写个两层循环赋值for(){
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁VB6.0的一个题目:1个字符型的数组没有被赋值,其数组元素的值为?_百度知道
VB6.0的一个题目:1个字符型的数组没有被赋值,其数组元素的值为?
1个字符型的数组没有被赋值,其数组元素的值为?
提问者采纳
对于字符型变量来说,缺省值是空字符串,也就是 &&quot没赋值的话就是缺省值
提问者评价
谢谢你,好快哦
其他类似问题
vb6的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁char&*p,&**p,&***p;
char&p[],p[][],p[][][];
char&*p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
&void (*pFun)(int i);
大神们看到这些东西脑袋里一定像蓝天白云一样清晰明了。。。
(1)关于指针与数组的存储
a、指针和数组在内存中的存储形式
& & & & 数组创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。数组名本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在于代码中(应该是符号表中),在链接时已经制定好了;而指针*p创建时,对应内存中这个指针变量的空间分配,至于这个空间内填什么值即这个指针变量的值是多少,要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。
&图画的真丑,不过全文就一张图,凑合看吧
b、指针和数组的赋值与初始化
& & & & 根据上文,一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。
p=p+1;&是不允许的
而是可以的;
p=p+1;&是允许的
p[0]=1;&是不允许的,因为指针没有初始化;
int&*p=&i;
p[0]=1;&是允许的;
& & & & 对于字符指针还有比较特殊的情况。
char&*&p=&abc&;
p[0]='d';&是不允许的
& & & & 为什么初始化了的字符指针不能改变其指向的内容呢?这是因为指向的是“常量”字符串,字符串实际是存储在程序的静态存储区的,因此内容不能改变。这里常量字符串的地址确定在先,将指针指向其在后。
& & & & 而
char&p[]=&abc&;
p[0]='d';&是允许的
& & & & 这是因为,这个初始化实际上是把常量直接赋值给数组,即写到为数组分配的内存空间。这里数组内存分配在先,赋值在后。
(2)关于一些表达式的含义
char&*p,&**p,&***p;
char&p[],p[][],p[][][];
char&*p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
& & & & 能清晰地知道以上表达式的含义吗?(知道的去死!)
第一组:char&*p,&**p,&***p;
& & & & 分别为char指针;指针,即指向类型数据地址的指针;指针,即指向类型数据的指针;他们都是占字节空间的指针。
char&c='a';
char&*p=&c;
char&**p1=&p;
char&***p2=&p1;&&
cout&&***p2&&
第二组:char&p[],p[][],p[][][];
& & & & 分别为一维,二维和三维型数组,即数组,数组的数组,数组的数组的数组。可以如下的方式进行初始化:
char&pp[3]=&ab&;
char&pp1[3][3]={&ab&};
char&pp2[3][3][3]={{&ab&}};
& & & & 现在我们尝试使用第二组三个数组名对应为第一组三个指针赋值,直接赋值的结果如下:
p1=pp1;&//错误
p2=pp2;&//错误
& & & & 为什么和的赋值会出错呢?原因是数组名为给指针赋值的规则不是递归的,即数组的数组可以为数组的指针赋值,而不可以为指针的指针赋值。这里先了解到这个抽象的规则,下面讲完第三组表达式,等我们知道数组的指针和指针的数组如何书写后再对这一问题举例说明。
第三组:char&*p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
& & & & 这一类表达式的解析方法如下:
& & & & 首先把整个表达式分为三部分,
& & & &&数据类型和星号部分或括号内内容部分中括号部分
如:*(*p)[]分为char* & ,(*p) 和 &[]
& & & &&“char*”表示最内层存储的数据类型“(*p)”表示最外层指针“[]”表示中间层数组(维数中括号数目),因此上式表示一个一维数组的指针,数组中的元素的数据类型是指针。同理,(**p)[][]表示,一个二维数组的指针的指针,数组元素的数据类型是char。这里如果表达式中间没有括号(如**p[]),则实际上是一个数组,如果最右没有中括号(如),则实际上是一个指针。下面通过赋值表达式来理解这些表达式的含义:
char&c='a';
char&*pc=&c;
char&*p[3],*p1[3][3],**p2[3],**p3[3][3],*(*p4)[3],(**p5)[3],(**p6)[3][3],(*(*p7))[3];
p3[0][0]=&
(**p5)[0]=c;
(**p6)[0][0]=c;
(**p7)[0]=c;
& & & &&注意,和是等价的。
& & & &&这里再继续上一小节讲一下数组名给指针赋值的问题。
& & & &&事实上可以对等赋值的数组和指针关系如下(——表示“赋值给”):
数组——指针&&&:&&——
指针的数组——指针的指针&&&:&&——
指针的指针的数组的——指针的指针的指针&&&:&&——
。。。。。。
数组的数组——数组的指针&&&:&&——
数组的数组的数组的——数组的数组的指针&&&:&&&&——
总之,最外层的数组可以转换指针,往内层不递归。
(3)关于上述表达式的长度
& & & &&求一个表达式的“长度”,首先分清表达式实际表示的是一个数组还是一个指针;如果是指针,则长度为4byte;如果为数组则要计算实际存储的总元素个数和元素的数据类型。另外要注意要求的是数组元素个数还是数组总字节数;
*(*p)[3][3]
& & & &&由上文可知上式表示一个指针,因此长度为;而
**p3[3][3]
& & & &&表示一个二维数组,数组元素类型为指针的指针,因此长度为;
& & & &&注意,标准中函数求得的是总字节数而非数组长度。
(4)关于函数的指针返回值和指针参数
& & & &&指针作为返回值要注意的地方是不要返回局部数据的指针。
char&*&fun(void)
char&i='a';
return&(&i);
& & & &&调用函数得不到值,原因是函数返回后,局部数据在栈中被析构,数据内存被回收,指针指向的数据没有意义;
& & & &&可以改为:
char&*&fun(void)
char&i='a';
char&*p=(char&*)malloc(5);
If(p!=NULL)&{p[0]=i,&p[1]='\0';}
return&(p);
& & & &&这里使用分配了内存(在堆中)在函数返回后依然有效。
& & & &&这里还没完,因为有一天我使用了下面的代码:
char&*&fun(void)
char&*p=&abc&;
return&(p);
发现虽然定义为局部变量,但返回也是正确的。还记得上面讲到的常量字符串存储位置吗?指针实际指向了静态数据区,这里的相当于,这样的数据在函数返回后是不会被立刻回收掉的。
& & & &&指针作为参数主要用于修改指针指向的数据内容,但修改指针的值无效,
char&*&fun(char&*p)
char&i='a';
p=(char&*)malloc(5);
& & & &&因为传递的是一个指针副本(形参指针和实参指针的值相同,但不是同一个指针),不会影响调用方的实参值。(诡异的貌似可以通过形参将实参的值改掉!不过还是不要冒这个险为好了)。
(5)关于const修饰符
& & & &&const修饰符用于指针时也非常纠结。
& & & &&首先要分清const&char&*p和。
& & & &&const&char&*p是指向对象的指针,即对象是只读的,而指针不是。使用对象的指针要注意两点:
一是不能将其赋值给非对象的指针,
const&char*&p;
char&*p1=p;&//不允许的
& & & &&当然,直接使用非指针指向对象也是不合法的,
const&char&c;
char&*p1=&c;//不允许的,
& & & &&这是要避免通过上述改变对象的值。
& & & &&二是可以将非对象的地址赋值给指向对象的指针,但是试图使用这个指针改变变量的值是非法的,
char&c='a';&
const&char*&p=&c;//允许的
*p='b';//不允许的
& & & &&char*&const&p是指针,即指向对象可编辑,但指针本身不可修改,这一点类似于数组。
char&c='a';&
char*&const&p=&c;
*p='b';//允许的
p++;//不允许的
& & & &&区分两者的方法是,看是否靠近指针名,如果是则为指针,否则为对象。这个助记方法的前提是char要和号靠在一起,因为。
另外,还有,自然是指向对象的指针了。
(6)关于指针函数
& & & &&首先注意指针函数和函数指针的区别,前者是指“返回指针的函数”,这在上文中有提到,而后者是指“指向函数的指针”。
& & & &&函数指针的定义方法为,将“函数名”替换为“(*函数指针名)”,
& & & &&指向一个声明为void&fun(int&a)的函数指针可以定义为&或,注意这里函数指针只能指向和有相同返回类型()和参数类型()的一类函数,另外定义中也不是摆设,去掉会被看做是返回值为类型的函数声明。举个例子:
void&fun(int&a)
int&main()
void&(*pFun)()
pFun=&&&//(1)
*(pFun)(1);&&&//(2)
& & & &&事实上,上式中的(1)(2)行做如下几种替换也是正确的:
&&&pFun(1);&
b、pFun=&&
&&&pFun(1);&
&&*(pFun)(1);&
& & & &&如果有什么疑问的话,可以接着尝试用如下方式直接调用函数:
(*fun)(1);
& & & &&运行的结果也是正确的!这要怎么解释呢?
& & & &&其实,fun不仅仅作为函数名,它同一样也是一个函数指针,只不过是函数指针常量。为了书写方便,语言开发者允许将函数指针调用直接写成类似的形式,同样函数指针变量赋值也可以写成类似的形式。值得注意的是,函数声明的格式还是比较严格的,如:
void&fun(int&);&&&&//不能写成fun)(int&)。
& & & &&同样,
void&(*pFun)(int&);&&&//不能写成pFun(int&)。
& & & &&为了方便,我们还可以定义函数指针类型,针对上述例子的定义方法如下:
typedef&&void&(*PFUN)(int);
& & & &&这样一来我们就可以用
来声明一个函数指针了。
& & & &&有了函数指针之后,函数的参数也可以设为某一类函数类型。
typedef&&void&(*PFUN)(int);
void&fun(int&a)
void&topfun(PFUN&f1,&int&a)
int&main()
topfun(fun,1);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:99991次
积分:2103
积分:2103
排名:第8221名
原创:113篇
转载:50篇
评论:15条
(1)(1)(12)(2)(14)(40)(4)(6)(19)(7)(1)(12)(13)(12)(20)

我要回帖

更多关于 java数组初始化赋值 的文章

 

随机推荐