哎,你问的问题也太多了,先给你解两个吧:
第一个:
字符串末尾都有“\0”
while(*t++);执行这一句,如果指针t未指向末尾则继续向后移动,因为后面直接写了一个“;” 所以t不到字符串末尾,执行空语句,而不是执行:t--。
当t到末尾时,退出循环,执行 t--,因为最后的“\0”不计入字符串的长度,所以其值要再减1!
首地址末地址之差就是实际长度。
第二个:
int a[2][3],*p[3];则为什么p[0]=&a[1][2];
p为指针数组,即其里面的元素p[0],p[1]等都代表的是地址,所以对于数组a中的元素a[1][2]要取地址。
关于 用 指针,指针数组,数组指针 访问 一维数组 二维数组 的程序,看下面的几个程序吧:
用指针,指针数组,数组指针 访问一维数组和二维数组,指针的初始化和数组元素的输出容易混淆。分析一下几个小例子:
/*
#include
using namespace std;
int main()
{
int a[3] ={0,1,2};
int *p;//int 型指针访问一维数组
p = a;
int i;
for(i=0;i<3;i++)
cout<<*(p)++<
*/
/*
#include
using namespace std;
int main()
{
int a[3] ={0,1,2};
int (*p)[3];//用数组指针访问一维数组
p = &a;
int i;
for(i=0;i<3;i++)
cout<<*(*(p)+i)<
*/
#include
int main()
{
int a[3]={0,1,2};
int *p[1];//用指针数组访问一维数组
p[0] = a;
int i;
for(i=0;i<3;i++)
printf("%d\n",*(*p+i));//或者printf("%d\n",*((*p)++));
}
/*
#include
using namespace std;
int main()
{
int a[2][3]={0,1,2,3,4,5};
int *p;//int 指针访问二维数组
for(p =a[0];p cout<<*p++<
*/
/*
#include
using namespace std;
int main()
{
int a[2][3] ={0,1,2,3,4,5};
int (*p)[3];// 数组指针访问二维数组
p = a;
int i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cout<<*(*(p+i)+j)<
*/
/*#include
using namespace std;
int main()
{
int a[2][3]={0,1,2,3,4,5};
int i,j,*p[2];//指针数组访问二维数组
p[0] = a[0];p[1]=a[1];//*p[2] = {a[0],a[1]};
for(i=0;i<2;i++)
for(j=0;j<3;j++)
cout<<*(*(p+i)+j)<
其他的自己慢慢分析吧,就那几行,想必不是很困难,学着调试,看看每执行一步各个变量的变化情况~,仔细分析出来,比问别人而学会更好。
愉快~
蚝油难度