大一下第一周

 

Ⅰ.

通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着(不仅数据元素所包含的数据的个数要相同,而且对应数据项的类型要一致

数据的存储结构是指(数据的逻辑结构在计算机中的表示

 

 

Ⅱ.

 

 

Ⅲ.

类型起别名——typedef

关键字typedef用于为系统固有的或程序员自定义的数据类型定义的一个别名,如:

Ⅰ
typedef struct student
{
    char number[5];
    char name[11];
    int shu1;
    int shu2;
    int shu3;
};
int main()
{
struct student stud[11];
scanf("%s %s %d %d %d",&stud[i].number,&stud[i].name,&stud[i].shu1,&stud[i].shu2,&stud[i].shu3);
}




Ⅱ
typedef struct student
{
    char number[5];
    char name[11];
    int shu1;
    int shu2;
    int shu3;
}student1;//student1是类型名,类型起别名
int main()
{
    student1 stud[11];
    scanf("%s %s %d %d %d",&stud[i].number,&stud[i].name,&stud[i].shu1,&stud[i].shu2,&stud[i].shu3);
}
————————————————
版权声明:本文为CSDN博主「ZVAF_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZVAF_/article/details/111183337

变量起别名——引用(c++)

类型标识符 &引用名 = 目标变量名

1.注意:

引用在定义时必须初始化

int a=10;
int &b=a;//正确


int a=10;
int &b;
&b=a;//会报错

引用在初始化时只能绑定左值不能绑定常量值

引用一旦初始化,其值就不能再更改,即不能再做别的变量的引用

数组不能定义引用

2.引用与指针

不存在空引用,引用必须连接到一块合法的内存

一旦引用被初始化为一个对象,就不能被指向到另一个对象,指针可以在任何时候被指向另一个对象

引用必须在创建时被初始化,指针可以在任何时候被初始化

3.应用

主要应用是将它作为函数的参数,以扩充函数传递数据的功能,引用作函数参数是区别于值传递与址传递的引用传递,形参变化实参也发生变化

 

 

Ⅳ.值传递,址传递,引用传递(在C语言中,参数传递的机制只有一种,就是值传送)

值传递(形参变化实参不变)

#include <stdio.h>
void mySwap(int, int);
int main()
{
    int a = 20,b = 30;
    mySwap(a, b);
    printf("%d %d\n", a, b);
    return 0;
}
void mySwap(int m, int n)
{
    int t = m;
    m = n;
    n = t;
}
程序执行结果为: 
20 30
。

可以简单的理解为:

在进行函数调用时隐含的把实参a,b的值分别赋给了m,n,在函数调用过程中并没有对a,b进行任何操作

实际上是:

随着 swap 函数的结束,被作为局部参数的形参m,n以及 swap 函数本身的局部参数t都将结束其生存期,在内存中的储存空间释放,因此实参a,b并未受到影响

址传递

#include <stdio.h>
void mySwap(int*, int*);
int main()
{
    int a = 20,b = 30;
    mySwap(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}
void mySwap(int *m, int *n)
{
    int t = *m;
    *m = *n;
    *n = t;
}
程序执行结果为:
30 20
。

 

看函数的接口部分:mySwap (int *m, int *n),请注意参数px,py都是指针

再看调用处:mySwap (&a, &b); 它将 a 的地址 &a 代入到 m,b 的地址 &b 代入到 n。同上面的值传递一样,函数调用时做了两个隐含的操作,将 &a ,&b 的值赋给了m,n。
整个 mySwap 函数调用执行如下:

m=&a;   
n=&b;  //请注意这两行,它是调用 swap 的隐含动作。
int t=*m;
*m=*n;
*n=t;
printf("*m=%d,*n=%d\n",*m, *n);

这样,有了头两行的隐含赋值操作,我们现在已经可以看出,指针 m,n 的值已经分别是 a,b 变量的地址值了。接下来,对 *m,*n 的操作当然也就是对 a,b 变量本身的操作了。所以函数里头的交换就是对 a,b 值的交换了,这就是所谓的址传递(传递 a,b 的地址给 m,n)

总结:

在这个程序中用指针变量作参数,虽然传送的是变量的地址,但实参和形参之间的数据传递依然是单向的“值传递”,即调用函数不可能改变实参指针变量的值。但它不同于一般值传递的是,它可以通过指针间接访问的特点来改变指针变量所指变量的值,即最终达到了改变实参的目的。

 

#include <stdio.h>
void mySwap(int*, int*);
int main()
{
    int a = 20,b = 30;
    mySwap(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}
void mySwap(int *m, int *n)//不能实现交换的传递
{
    int *t = m;
    m = n;
    n = t;
}
程序执行结果为:
20 30
。

引用传递

#include<stdio.h>

void swap(int &m,int &n){
	int t=m;
	m=n;
	n=t;
	
}
int main(){
	int a=20,b=30;
	swap(a,b);
	printf("%d %d",a,b);
	return 0;
}
程序执行结果为:
30 20
。

Ⅴ.输入输出的实现

以输入1~n的的和为例

1.使用输入输出函数

void sum(){
	scanf("%d",&n);
	s=0;
	for(int i=1;i<n;i++)
	s+=i;
	printf("%d",s);
}

2.使用全局变量

int s;
void sum(int n){
	s=0;
	for(int i=1;i<=n;i++)
	s+=i;
}

3.使用参数

#include<stdio.h>
void sum(int n,int *s){//址传递 
	*s=0;
	for(int i=1;i<=n;i++)
	*s+=i;
}
int main(){
	int n;
	scanf("%d",&n);
	int s;
	sum(n,&s);
	printf("%d",s);
	return 0;
}

 

#include<stdio.h>
void sum(int n,int &s){//引用传递 
	s=0;
	for(int i=1;i<=n;i++)
	s+=i;
}
int main(){
	int n;
	scanf("%d",&n);
	int s;
	sum(n,s);
	printf("%d",s);
	return 0;
}

cin不能用来输入空格,在输入含空格的字符数组时用scanf,同时也要注意字符数组输入时的换行(getchar)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值