明白了呵~还有一道,静态变量的不明白这种算法怎么回事,输出5,9能分解的给我讲讲么?辛苦啦,我会追分的
#include<stdio.h>
int f(int m)
{
static int k=2;
k++;
return k+m;
}
void main( )
{
int s;
s=f(2);
printf("%d, %d\n", s, f(s));
}
输出5,9能细细的讲一下么
真心谢谢呵`
main( )
{
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int i, j;
for(i=0; i<3; i++)
{
for(j=0; j<4; j++)
printf("%d, ", *(*( )+ ));
printf("\n");
}
}
空里应该填a+i j 可是为什么不能运行呢?还有这段代码说是二维数组中变量的访问及其地址的计算,可我不是很明白其中的意义,我会追分的`辛苦了
你填的是对的,没有错,hehe!
这个2维数组的需要掌握 行指针与列指针的概念!
你可以把2维数组看成是个 元素是数组的数组,这样的话,可能比较好理解
你还记得吗?数组名是可以隐式转换成指针的,如一维数组int a[5],int *p=a;//这个就是数组名转换成指针咯;
二维数组嘛,int array[3][4]则可以int (*ptr)[4]=array;//这里不能array=ptr,记住哈!
还有sizeof(a[0])=4(4为int机器字节),sizeof(array[0])=4*4=16(4为array[0]中的数组有4个元素,另一个4为int机器字节) 呵呵,不知道看到这里你看没看懂...
呵呵,那我现在来讲讲*(*(a+i)+j)的意思吧:
a+i 表示的是行指针,即指的是 第a+i行
*(a+i)+j表示是列指针,即指的是 第a+i行第j个(列)的元素
*(*(a+i)+j) 表示是 对指定的元素进行解引用,获取该元素的值
不知道你说的不能运行是不是应为没有#include 还是你复制时复漏了...
呵呵 我水平有限就这些啦,希望对你有帮助哈!
讲的很明白,真心感谢呵
int main(void)
{
int a[5]={1,2,3,4,5};
int *p=a;
printf("%d,%d,%d,%d\n",*p++,(*p)++,++(*p),*p);
getch();
return 0;
}
怎么理解这段代码
*p++,(*p)++,++(*p),*p分别什么意思呢?辛苦啦
这个输出我是不能确定啦,hehe,应为printf("%d,%d,%d,%d\n",*p++,(*p)++,++(*p),*p);这个表达式的求值顺序不能确定,所以不同机器上运行结果不同...
那我就讲讲 *p++,(*p)++,++(*p),*p 的意思吧
首先,先讲一下,*的优先级比++后者--低,还有就是()能强制优先
p指向数组a,则*p++的执行是,先对p进行解引用,然后p++,即p指向数组下一位
(*p)++,则执行的是先对p进行解引用,然后再对解引用后的值进行自增1,指针没有移动
++(*p),和上面一条含义一样,只是++方式不同了,对解引用后的值进行自增1,指针没有移动
*p表示直接解引用...
呵呵,就这些了!
我推荐一本书吧,谭浩强的《C程序设计》,讲的很好,不过就是浅了点,对初学者很有帮助!
希望对你有帮助,哈哈@
懂了,谢谢了呵
main(){
int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf("%d\n",z);
}
输出为什么是2?
void main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
}
输出为什么是000122
我会追分的,辛苦了,真心感谢