帮我解释下这段c++的程序。最好详细点,尤其是typedef int int

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-31
vector<int>::size_type ix=0 谁帮我解释下C++里这段代码!详细点的!尤其是size_type!

vector::size_type //::号前面是命名空间,后面是自定义的类型
你要用到这个类型时,必须加上命名空间,防止和其他命名空间中的定义重复。
vector::size_type ix=0 //这句的意思就是定义一个vector命名空间中类型为size_type的变量ix,并将其赋值为0。

typedef 为了和声明一致,所以使用了和声明一样的书写格式
typedef int int_array[4]; 相当于有些语言中的 typedef int[4] int_array ;

而整个二维数组要这样声明的原因是在于C是列优先排列的int a[3][4] 是三行四列,先按照列排成四个一组,然后在排成三组,所以地址顺序刚好相反。现在很多语言采用递归式定义来表示,要比C语言的方式容易懂一点,但C系列的语言就是这样的记住就好了

一、先解释typedef int int_array[4];
关键字typedef用来自定义数据类型,这是所有教材都这样讲的,但不要理解为新创建了一个数据类型,而是将已有的一个类型赋予个新名称而已,即起一个别名。
具体对这个语句来说,别名就是:int_array。而[4]不属于名字,而表示一种已有的数据类型,即:给一个大小为4的int数组取一个别名为int_array。
那如何知道是这样定义的呢?很简单。
首先,int a[4];这可是常见的定义格式。再在其前面添加关键字typedef,变成 typedef int a[4];最后将数组名a改为自己想要的一个别名int_array即可。注意:原本的a本意是数组名,属于变量范畴,而int_array则是新数据类型名(即别名),本质不一样了哦。祥见谭浩强的那本经典教材。

二、语句int_array *p =ia;的含义
首先,它是一个定义语句,即用自定义的数据类型int_array来定义一个该类型的一个指针变量ia。
ia是一个什么东东呢?它是一个二维数组名。
对于一维数组a,我们有:&a[0]等价于a,即都表示该一维数组首元地址。
那么,对于二维数组这个性质还成立吗?没错,同样成立。即:
&ia[0]等价于ia。
所以,int_array *p =ia;与int_array *p =&ia[0];是等价的。
但是,&a[0]与&ia[0]含义是不一样的。前者代表了一维数组中首元地址,而后者则代表二维数组中第一行的行首地址。
行首地址与行首元地址,它们的值用cout输出来那肯定是一样的。但它们与指针的操作扯上关系时,就不一样了,前者以行为基本单位,后者以一个元素为基本单位,切记。
现在我们应该明白了,语句int_array *p =ia;的作用是定义p后,并初始化p,即用p来指向二维数组的第一行(整个这一行),即ia[0],不是第一行的首元ia[0][0]哦。当然,对p这样初始化是正确的,因为p要指向的正是大小为4的一维数组,而二维数组ia的每一行正好就是4个元素。
ia[0]可认为是首行的数组名。ia[1]、ia[2]类推。

三、语句++p的含义
由上可知,p既然首先指向第一行ia[0],那么(p+1)不就指向第二行ia[1]吗?正是如此。
于是外循环的终止条件就应该是不存在的第四行,即ia[3],所以终止条件就是:p!= ia+3。

四、语句int *q=*p;的含义
如上所述,先定义整型指针q,并初始化为*p。
*p是什么意思?
前面已得到:p 被初始化为ia,即&ia[0]。那么*p就代表ia[0]。
即:p存储的是首行地址,于是,*p就直接代表了该行,即整个这一行。
而前面已经明确的讲了ia[0]代表的是首行的数组名,当然它是一维的。而一维数组名不就代表了这一行的首元地址吗?于是,就有
q=*p等价于q=ia[0],也等价于q=&ia[0][0]。
再于是,q指向了一个一维数组的首元。切记,不能说q指向了一个一维数组。再再于是,++q就表示&ia[0][1]。当然了,再执行一遍++q,就表示&ia[0][2]了。

在解释一下*p+4。
刚刚讲了*p直接代表了某一行,即ia[0]或ia[1]或ia[2],也讲了这些ia[0]或ia[1]或ia[2]就代表该行的行数组名。当然,都是一维的。
回忆一下,一维数组名加一个数字代表什么呢?例如a是一个一维数组名,a+4表示什么呢?答案是:&a[4],即该一维数组的第五个元素a[4]的地址。
所以*p+4表示:p所指那一行的第五个元素,当然这对于本题来说是不存在的,所以就做为内循环的终止条件咯。

*q代表什么呢?
q指向的是一个具体的元素,那么*q就直接代表了该元素的内存空间。那么,cout它就是输出该元素的值。

五、总结
外循环的步长是行,共3行,内循环是行中的各个具体元素,每行4个。
结果就是使用指针的方式将二维数组输出来。

够具体了吧。

以上回答,完全原创。还有啥问题,欢迎互相交流。

#include <iostream>
using namespace std;
int main()
{
int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
typedef int int_array[4];
//int_array *p 指向具有4个元素的一维数组
//ia 为数组ia 第三行首地址
for (int_array *p =ia;p!= ia+3;++p)//在这里++p 和 p++效果一样
{
for (int *q=*p;q!=*p+4;++q)

//第一次循环p指向&a[0] ,*p 则指向a[0][0],
{
cout<<*q<<" ";
//第一次 q指向a[0][0],即输出0
//第二次 q指向a[0][1],输出1
。。。
}
cout<<endl;
}
return 0;
}

typedef 这个直接百度百科不就有了

至于下面指针的运用,这东西解释起来很长。。。你还是认真把书看一遍吧。。

  • 帮我详细解释一下这个C程序!!!谢谢
    答:BOOL InputPassword(char *password) //输入参数为一个字符数组的首地址指针 { if(password)//判断输入的password是否为空,不为空则继续 { int key = 0; //定义一个变量,用以接收用户输入的键值(ASCII码值)while((key = getch()) != 13) //当用户输入回车(ASCII码值为13)时退出循环 { ...
  • 帮我讲解下 这段C程序代码的意思..详细点
    答:当 IF()内的值为真值时.将X-1的值赋给X。此时X=1 当 if() 内为真值。将X-3的值赋给X 此时X=-2 以整形的格式输出X 在IF 语句中,()只内只有两种值,真值或零,所有不为零的值都是真值 当N的初值为零的时候。!N即为非N。也就是非零。所以其值为真值。
  • 帮我理解一下这个c程序
    答:define是宏定义,编译器会把代码中的PRICE全部换成30。代码中统一写PRICE,这样如果以后你想把价格改成40的话,直接改#define 语句这一个地方的30就行了,不用把程序中的全部30都改成40
  • 请给我详细解释一下这段程序 谢谢了!!!C语言的!
    答:} 冒泡算法顾名思义,就是让最小的数一点一点被换到最前面来,当然如果比较的时候if (bb[j] > bb[j+1])这里用的是小于,那就是小的一点点被交换到后面去。程序开始的时候首先让数组的第一个数和第二个数比较,如果第一个数较大,则交换它们,以此类推,把最大的一个数交换到最后,然后再...
  • 那位帮我解释一下这个c语言程序,
    答:int i,j,m;/*i,j都是循环变量,用于控制循环的执行次数,m用于保存xx[][]中保存的字符串的长度*/ char str[80];for(i=0;i<maxline;i++){ m=strlen(xx[i]);/*将从文件读出的第i+1行内容的长度保存到m中*/ memset(str,0,80);/*将str字符数组的所有元素设置为0*/ for(j=m-1;...
  • 谁能帮忙详细解释一下这个C语言程序~~要详细的哦~
    答:c->number[i]=cc%10;//如果cc大于10的话,这个就能存住cc的10位数,相当于进位了。cc/=10;} c->length=i;} //初始化 void init(BigNumber * b,char * a){ int i,length = strlen(a);//把字符转成数字存入BigNumber的数组里。比如:'9'-'0'=9 for(i=length-1;i>=0;--i) b...
  • c语言,请帮我详细分析一下这个程序。谢谢。
    答:int fun1(int i){ i=(i%i)*((i*i)/(2*i)+4);//i%i表示i除以i的余数肯定是0,所以最后i = 0;printf("i=%d\n",i); //显示i的值 return (i); //返回i的值 } int fun2(int i){ i=i<=2?5:0; //如果i<=2,i就等于5,否则等于0;return (i);} void main(){ i...
  • 求高手解释一下这段C语言程序。。。
    答:楼主你好。这个函数的功能是:将数组r[]中所存的浮点数字符串转换为float类型的浮点数,将结果赋值给sumc变量后,返回sumc。以下是程序的注释 float c(){ float sumc;//定义存储结果的浮点型变量 char k[20],i=0;//定义存储临时变量的字符数组k[]和循环变量i,i用于k数组中元素的定位 while(...
  • 帮忙解释一下这个C程序的运行结果.
    答:就是c语言语法规定的,以++为例,如果++放在变量前面,如i=++j,则执行先把j的值加1,然后把加1后的值赋值给i变量,如果++放在变量的后面,如i=j++,则执行先把j的值赋值给i变量,然后j的值加1,然后继续执行后面的语句。根据这个思路你再去理解运行结果你就会很清楚了。
  • 谁能给我解释一下这个很简单的c程序?
    答:main() { int a,b=0;a = 5;b = ((a++) * (a++)); 注意这里 a++ 执行了两次 , 但是 a++和 ++a 是 两个东西 a++是 先取 a的值 再自加 ++a 是先自加 再取值 ,所以 b=5 * 5; 这条完了 a ++ 执行两次 所以是 7 printf("a=%d\n",a);printf("b=%d",b);} ...