文章里面有一些伪代码,能看懂就行了=-=...
代码只有向前看的功能
标识符要尽量使用有意义的英文单词,这样的程序更容易读
数据类型分为标准数据类型和复合数据类型
变量是具有某种类型命名的内存空间
const称为内存常量
后缀表达式的作用是使变量的值增加或减少1
逗号表达式:
z=(x=5,y=x+5,y*x+10);
int x,y;
x=10,y=5;
算法的基本结构:顺序结构,分支结构,循环结构
定义数组时数组下标必须是整型常量表达式
访问数组中的元素时可以出现变量
如果p指向一个数组元素的话*p++可以
对二维数组而言,对数组名a进行算数运算的结果是使指针在行间进行移动
a==a[0]=&a[0][0]
a+1=&a[1]
指针与二维数组注意看
行指针:int (*p)[4]
它可以指向一个含4列的二维数组的行
用行指针处理二维数组的某一行
int a[3][4]={1...12};
int i,j;
int (*p)[4];
p=a[1];
for(i=0;i<4;i++)
cout<<(*p)[i];
p+1;就指向了下一行
指针数组
int *p[3];
指针数组可以处理二维数组
内存分为程序和数据两个区,程序区存储了程序中所有函数的代码,数据区包含了程序中的常量,全局数据,局部数据,动态数据,局部数据在栈中分配空间,动态数据在堆中分配空间
数据区分全局区,堆,栈
程序区main 库函数和其他被调用函数
动态内存分配:随时用到空间,随时分配,随时释放
要把含n个字符串存储起来,要申请至少含n+1个元素的一个数组,因为要存储’\0’
char *p[3]={“wang”,”Sun”,”Russell”}
p[0]指向了”wang”
gets ()遇到回车才执行
返回值类型要明确,否则默认为int
函数名(方法名)后面必须带括号
传值方式的实质是调用函数把实参的值复制了一份传给了被调用函数的形参,使形参获得了初始值
传址方式的实质是调用函数把变量的地址传给了被调用函数的形参,使形参指向了实参,其最终结果是被调用函数可以直接通过其形参来操作调用函数内部的数据
void fun(int *a,int *b){
int t;
t=*a;
*a=*b;
*b=t;
return ;}
main(){
fun(&x,&y);在这里只写出了关键步骤
向函数传一维数组:
被调用函数可以使用数组或指针作形参
调用函数必须使用数组名作实参
用数组作形参时,方括号中的元素个数可带可不带,函数运行时,系统并不为形参数组分配空间,形参只是调用函数函数传递数组的一个别名,对它操作就是对调用函数传递数组的操作,调用函数和被调用函数共享同一空间(与二维数组一样)
传二维数组时,行数可以省但列数不能省
同样可以利用(行)指针对二维数组进行操作
对数组进行函数处理只有两种:用数组处理数组,用指针处理数组
向函数传字符串:
第一种方式:传字符串,形参时一维数组
#include<iostream>
using namespace std;
int str(char *q);
int main(void) {
char *p = "hello";
int n1;
n1 = str(p);
cout << n1<<endl;
n1 = str(p + 1);
cout << n1 << endl;
}
int str(char a[])
{
int n = 0;
char *q;
q = a;
while (*q++)
n++;
return n;
}
第二种方式:传指针
#include<iostream>
using namespace std;
int str(char *q);
int main(void) {
char *p = "hello";
int n1;
n1 = str(p);
cout << n1<<endl;
n1 = str(p + 1);
cout << n1 << endl;
}
int str(char *q)
{
int n = 0;
while (*q++)
n++;
return n;
}
指针型函数返回的是地址
C语言规定,在语句块中定义的对象,它们的作用范围是从其定义位置到语句块结束位置
若希望在函数运行结束后变量中的数据仍然存在着,就应该定义为static
第一次调用函数时执行赋值语句,第二次再调用函数时将跳过赋值语句
静态变量伴随整个程序的消失而消失
#include<iostream>
using namespace std;
int str(void);
int a = 100;
int main(void) {
int b = 2;
{
int c = a + 2;
int b= 10;
// cout << c << endl<<a++<<endl;
}
str();
str();
cout << b << endl;
}
int str(void) {
static int b = 100;
b++;
cout << b<<endl;//输出101 102 2
return 0;
}
结构体是一种复合数据类型
定义结构体类型时不分配内存空间,类似于类是抽象的
typedef struct{
int a;
float b;
}STU; 注意STU不是变量,不占空间,
STU x;
定义X的同时分配了内存
同理C++里类也是不占存储空间的。struct stu{
int a;
int b;
int c;
}d1,d2,d3;
d1,d2,d3分别是结构体变量,它们每一个变量占用内存
记住:只对变量分配空间
STU *p;
STU a;
P=&a;
初始化时少于结构体内容个数,int默认为0 char默认为’\0’
通过结构变量访问结构成员格式:注意第一次有.运算符了
结构变量名.成员名
(*p).成员名
或者 p->成员名
结构体里面也可以含有数组
在结构体中也可以包含指针
若结构体其中一个成员本身是该结构类型,则把这种结构称为递归结构
这就可以让每一个结点(该种结构类型的变量称作结点)中的指针都可以指向同类型的另一个结点,指针连接起来的数据结构就叫链表
类似于int 指针只能指向int类型的变量
指针无论指向什么类型的变量,永远占用4字节
#include<stdio.h>
int *fun(int *p,int *q)
{
if(*p>*q)
return p;
else
return q;
}
main()
{
int x,y;
int *pmax;
scanf("%d%d",&x,&y);
pmax=fun(&x,&y);
printf("%d\n",*pmax);
}
引用的同时必须初始化,引用即别名,共享同一块内存空间
引用类型初始值必须是一个对象,并且类型必须一一对应
笔记难免有错误,希望大家指出,共同进步。