C语言中的指针

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:39:36
void countValue(int *a, int *n)
{ *n=0;
for(i=1;i<=1000;i++)
if(i%7==0&&i%11||i%7&&i%11==0)
a[(*n)++]=1;

}

题目的意思就是求1-1000中能被11或7整除但是不能同时被11和7整除的数

已经定义好了*a和*n

上面是一个子函数,谁能给我解释一下(*n)++与*n++的区别 以及*n=0,是一个什么意思呢?

太搞不懂指针这个东西了。。看来很多书也不明白,谁能解释的浅显易懂一点呢?

我觉得解释的好 能让我明白道理 可以加分哦

先给你解释一下指针变量和指针,还有指针变量指向的变量的分别意思。
指针变量的值是指针,指针就是地址;指针变量指向的变量就不是地址了,而是一个具体的变量。
看一个很简单的程序段:
main()
{ int a=5,*p=&a;
printf("%d",*p);}
在这里,定义了指针变量p,指针变量p又被赋予了a的地址,此时a的地址就是指针变量p的值;而*p就是指针变量指向的变量,此处是整型变量,由于p被赋予的是a的地址,所以说这个变量就是a,即*p=a.接着因为a被赋予了5,也就是*p就是为5.
这样你就可以理解*n=0是什么意思了,也就是n是一个指针变量,这个指针变量指向的变量是一个整型变量,*n就是一个整型变量,*n这个整型变量被赋值为0;
然后是你的第二个问题:*n++,因为*和++是同优先级,并且是自右向左运算(你查下书的附录可知),所以说,相当于*(n++),意思是取了*n这个值之后,再n++,即往下一个地址去,然后接着取这个地址的值;再n++....一直往下取。
而(*n)++呢,就是先取了*n这个值之后,然后再把*n这个值自增1.
如果不明白,建议多看几遍书哦!

int *n 表示n是一个整型指针
在n前面加个*,表示取n指针所指向的值
*n=0; 就是先初始化n指向的值为0
(*n)++与*n++的区别也就很明显了,前者表示n指针指向的值++,而后者表示n指针本身++

#include <iostream>
using namespace std;
void main(){
void countValue(int *a,int *n);
int a[300];
int count=0;
int *p1=a,*p2=&count;
countValue(p1,p2);
cout<<endl<<count;
}
void countValue(int *a, int *n){
*n=0;
int s