#include "stdio.h"
void fun(int *n)
{while((*n)--);
printf("%d",++(*n));
}
void main()
{
int a=100;
fun(&a);
}
结果100~1,(*n)--就是取指针N的前一个地址,因为C语言是从右往左计算的,所以要用(*n),不然就是*(n--)了
#include "stdio.h"
void main()
{
char *p="abcdefgh",*r;
long *q;
q=(long*)p;
q++;
r=(char*)q;
printf("%s\n",r);
}
因为p在前面已经定义了,这里是说明(long *)的属性
#include "stdio.h"
sub(int *a,int n,int k);<-这里要在main函数前面声明sub函数,不然会出错因为c是先声明后引用;
void main()
{
int x=0;
sub(&x,8,1); 把x的地址传入sub中 &符号是取地址,常与指针合用如 int *p,q;p=%q就是把q的地址付给p,p是指向q的指针,改变p的值就是改变q的值
printf("%d\n,x");
}
sub(int *a,int n,int k)
{
if(k<=n)
sub(a,n/2,2*k) 这里使用了一个递归函数
*a+=k;
}
*n--是指针指向的地址减1相当于
*(n--)
即n--;*n;俩步
(*n)--是指针指向的内容减一
q=(long*)p是什么意思啊?有没有表示成q=long *p的情况呢?二者有何区别吗?
p是字符型指针 (long*)p 是把p转换成长整形指针
最后一个是递归函数的sub自己调用自己
第一次调用是
sub(&x,8,1)
第二次调用是
sub(&x,4,2)
第三次调用是
sub(&x,2,4)
第四次调用时不满足if(k<=n)
就到下一步了
*a+=k
再把数据依此向回传递
你要是学计算机的建议你看看c和指针这本书超级经典
你要是就是为过级把题做做就行很好过不用抠的这么细
#include "stdio.h"这种不是自己写的头文件一般用<>好了,具体可以百度。。。
想问一下(*n)--是什么意思啊?与*n--有什么不同吗?请帮忙分析下。
while((*n)--);不要在这里纠结了,朋友,说白了,这是一个关系运算符优先级的问题(*n)--为了更清楚的说明是*和n先结合的,而不是n和--,
请问一下,q=(long*)p是什么意思啊?有没有表示成q=long *p的情况呢?二者有何区别吗?,就问题而言吧,p原来是指向char的指针,(long*)是一个强制类型转换,转换成指向long的指针,对于q=long *p是否行的通你可以自己试试,如果可以就行,2者没有区别,加了括号更清晰,
最后一个我改了改,如有疑问你看看我的,呵呵:
#include
void sub(int *a, int n, int k);
int main()
{
int x = 0;
sub(&x, 8, 1);
printf("%d\n",x);
getch();
return 0;
}
void sub(int *a, int n, int k)
{
if (k <= n)
sub(a, n / 2, 2*k);
*a += k;
}
为了赚点分数,郁闷