c语言学到什么,c语言中指针快速理解
Yyds干货库存
今天我们来回顾一下C语言中指针的特点。
直接装载代码:
#包含位/标准数据。h
使用命名空间std
int a[2];
int main()
{
int * b=a;//地址是传入的,所以会改变原来的值
for(int I=0;I=1;我)
{
cout b[I]endl;
b[I];
}
for(int I=0;I=1;我)
{
cout a[I]endl;
a[I];
}
}运行结果:
因为A的地址传递给了指针B,当指针B访问并操作,然后遍历数组A时,数组A中元素的值也会发生变化。
很简单吧?那么请看这个问题和这串代码:
示例:
代码:
#包含位/标准数据。h
使用命名空间std
int du[10005];
vector int p[10005];
int main()
{
int n,m;
CIN nm;
while(m -)
{
int a,b;
CIN a b;
p[a]。push _ back(b);
p[b]。push _ back(a);
杜[a];
杜;
}
cout endl
cout endl
Cout 每个节点的度的初始du: endl;
for(int I=1;I=n;我)
{
cout I : du[I]endl;
}
cout endl
int k;
CIN k;
while(k -)
{
int * du2=du//这里是指针*
int np
CIN NP;
for(int I=1;i=np我)
{
int x;
cin十世;
du2[x]=0;
for(int j=0;j p[x]。size();j)
{
if(du2[p[x][j]]!=0)
du2[p[x][j]]-;//就是这个原因!*
}
}
cout endl
cout endl
cout du2变化后,du各节点的度: endl
for(int I=1;I=n;我)
{
cout I : du[I]endl;
}
for(int I=1;I=n;我)
{
if(du2[i] 0)
{
cout NO endl
goto k;
}
}
cout YES endl
k:
;
}
返回0;
}然后,带入测试数据:
10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 10
2 4
五
4 10 3 8 4
6 6 1 7 5 4 9
3 1 8 4
2 2 8
9 8 7 6 5 4 2运算结果:
我们会发现,du2的变化导致了du的变化。为什么?我在开头给出的原因是指针的特性。
综上所述,代码复杂的时候,可能很难找出原来简单的问题,所以C语言基础要打好,不然就像我这次一样,看着复杂的代码调试小问题~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。