1.赋值问题:
一般是从左到右,所以左边最好赋值就是A,D,之后,对于C,他就是赋值语句。
对于C选项是b==c是一个值,对于B,我觉得是(a= =b),如果是a=b是对的。
2.指针问题:
#include<stdio.h>
int k=5;
void f(int *s)
{
*s=7;
}
int main()
{
int m=3;
f(&m);
printf("%d,%d\n",m,k);
}
结果为:7,5
*****************************************************************************
*********************************************************************
#include<stdio.h>
int k=5;
void f(int *s)
{
s=&k;
*s=7;
}
int main()
{
int m=3;
f(&m);
printf("%d,%d\n",m,k);
}
结果:3,7
因为在f()函数中重新赋值了,所以和前面的不一样。
*ptr++:就是得到ptr,就是等于 *(ptr++)
++ptr:就是ptr后一个值,就是等于(++ptr)
(*ptr)++:就是取ptr值加1.
++(*ptr):也是取ptr值再加一。
就是int (* p)[4]:就是p指向对象为整形的含有4个元素的一维数组。
对于定义时int (* p)[4],才是指向一维数组,而在应用时,如下:
(*p)[3]:是p所指的行中的序号为3的元素。
3.递归问题:
就是第一次,9+sum(9,2),2->9+1+sum(1,1)->9+1+2;
每一次会指针首元变换。
和第一个一样都可但是不同的h是array【0】开始的。
4.结构体问题:
注意这是一个无返回值的结构体,以后会有对比
++(p.a)就是先把a值赋值 在加1.
#include<stdio.h>
int main()
{
int a[4]={1,0,4,9},*p=a;
printf("%d\n",++(*p));
}
2
#include<stdio.h>
struct complex
{
int real;
int unreal;
float un;
} data1={1,8,2.2},data2;
int main()
{
data2.real=data1.un;
printf("%f",data2.real);
}
错误,不可以不同类型的赋值
对于结构体可以整体赋值。
#include<stdio.h>
int fun(int a)
{
a=2;
return a++;
}
int main()
{ int b=1,c;
c=fun(b);
printf("%d",c);
}
2
有返回值类型int ,所以a的值会改变。
#include<stdio.h>
int fun(int a)
{
a=2;
return a++;
}
int main()
{ int b=1,c;
c=fun(b);
printf("%f",c);
}
0,就是错误
有返回值,所以值变化。
无返回值的但是有数组,对被调函数的数组改变就是对主调数组的改变。
明确指针没有&就是取值。
#include<stdio.h>
struct A
{
int real;
int unreal;
} complex[2]={1,6,9,4},*t;
int main()
{ t=complex;
printf("%d",(t++)->real);
printf("%d",t->real);
}
19
#include<stdio.h>
struct A
{
int real;
int unreal;
} complex[2]={1,6,9,4},*t;
int main()
{ t=complex;
printf("%d",++(t->real));
printf("%d",t->real);
}
22
#include<stdio.h>
struct A
{
int real;
int unreal;
} complex[2]={1,6,9,4},*t;
int main()
{ t=complex;
printf("%d",t->real++);
printf("%d",t->real);
}
12
#include<stdio.h>
struct A
{
int real;
int unreal;
} complex[2]={1,6,9,4},*t;
int main()
{ t=complex;
printf("%d",++t->real);
printf("%d",t->real);
}
22
#include<stdio.h>
struct A
{
int real;
int unreal;
} complex[2]={1,6,9,4};
int main()
{
struct A *p=complex;
printf("%d",++p->real);
}//明白struct A *p=&complex;不对,然后,在struct定义时不可以定义*p=complex;
2
#include<stdio.h>
#include<stdlib.h>
void fun(int *a)
{
a=(int *)malloc(sizeof(int));
*a=2;
}
int main()
{
int b=1,*p=&b;
fun(p);
printf("%d",*p);
}
1
#include<stdio.h>
#include<stdlib.h>
int main()
{
int b=1,*p=&b;
p=(int *)malloc(sizeof(int));
*p=2;
printf("%d",*p);
}
2
#include<stdio.h>
void fun(int *a)
{
*a=2;
}
int main()
{
int b=1,*p=&b;
fun(p);
printf("%d",*p);
}
2
#include<stdio.h>
#include<cstring>
#include<stdlib.h>
void fun(char *p)
{
strcpy(p,"wer");
}
void fun2(int *s)
{
s=(int*)malloc(sizeof(int ));//如果屏蔽,则最后输出9
for(int i=0;i<5;i++)
*(s+i)=9;
}
int main()
{
char s[10]="verygood",*ps=s,a[20]="beijinghangtan";
int l[5]={1,2,3,4,5};
ps+=4;
*ps='t';//*ps="er",错误 . ps="tytu";可以但是只是地址
//ps="tytu"; puts(ps);就是tytu,那要是puts(s);就是verygood
puts(s);//verytood
putchar('\n');//其实puts也有\n
strcpy(a,s);
puts(a);//输出verytood
fun(a);
putchar('\n');
puts(a);//输出wer
putchar('\n');
fun2(l);
printf("%d",l[2]);//3
}
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
typedef struct stu
{
char name[10],gender;
int score;
}STU;
void f(char a[])
{
strcpy(a,"Qian");
}
int main()
{
STU a={"Zhao",'m',290},b;
b=a;
f(b.name);
b.gender='f';
b.score=350;
printf("%s,%c,%d",a.name,a.gender,a.score);
printf("%s,%c,%d",b.name,b.gender,b.score);
}
Zhao,m,290Qian,f,350
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
typedef struct stu
{
char name[10],gender;
int score;
}STU;
void f(char *p)
{
strcpy(p,"Qian");
}
int main()
{
STU a={"Zhao",'m',290},b;
b=a;
f(b.name);
b.gender='f';
b.score=350;
printf("%s,%c,%d",a.name,a.gender,a.score);
printf("%s,%c,%d",b.name,b.gender,b.score);
}
Zhao,m,290Qian,f,350
结构体类型可以是结构体,定义结构体类型时不会分配空间。
指针赋值字符串: