C/C++基础2

4 篇文章 0 订阅
1 篇文章 0 订阅
int ar[]={1,2,3,4,5};
int *p =&ar[0];

printf("%d\n",p);
p++;//p加1后打印出来差4,为1个int变量占用字节数
printf("%d\n",p);


//通类值运算
int *q=&ar[4];
printf("%d\n",q-p);//值为4,同类指针相减,以数据长度减
  • 数组和指针

//数组名为数组首地址

int ar[5]={1,2,3,4,5};
int *p=ar;// ar+1 等于p+1 
//ar    ar+1    ar+2
//p    p+1    p+2

//*(ar+1) 得 ar数组第2个的值,等于ar[1]
//ar[0]    ar[1]    ar[2]
//*ar    *(ar+1)    *(ar+2)
//p[0]    p[1]    p[2]
  • 结构体


void main()
{
    int a[]={5,8,3,7,3};
    int y,*p=&a[1];
    y=(*--p)++;   \\(*--p)表示内存  内存内容++
    printf("%d\n",y);\\5
    printf("%d\n",a[0]);\\6
}

\\结构体是有基本数据类型构成的,数据类型(其他数据类型组合)
\\关键字 struct
\\结构体变量内存地址是结构体变量第一个元素的地址

struct Person{
    int id;
    char name[10];
};
void main()
{
	//定义结构体数据类型变量
	//初始化
	struct Person person={
		1,"xingming"
	};
	printf("%d\n",sizeof(person));
	printf("%d\n",&person);
	printf("%d\n",person.id);
	printf("%s\n",person.name);
}

//结构体指针变量通过->方式去引用结构体变量的成员
void main()
{
	struct Person person={
		1,"xingming"
	};
	struct Person *p= &person;
	printf("%d\n",p);
	printf("%d\n",*p);//在结构体中不可行
	printf("%d\n",p->id);
}

//结构体的指针可改变变量内容
struct Person{
    int id;
    char name[10];
    char f;
}P={1,"static",'A'};//全局变量
void main()
{
	struct Person *p= &P;
	p->f = 'c';
	printf("%c\n",P.f);
}

  • typedef 类型定义

例如 
typedef int I;  
I就代表int,可以用来定义对象等如 
I i;
用于模块
typedef struct{
int id;
char name;
}Person;

使用时直接

void main()
{
	Person *p= &P;
	p->f = 'c';
	printf("%c\n",P.f);
}
  • 函数指针

//函数被编译执行,会占用内存,内存有个地址。可以通过指针使用函数,想使用变量地址一样
//函数地址是函数的名字
struct Person{
    int id;
    char name[10];
    char f;
}P={1,"static",'A'};//全局变量
void printPersonInfo(struct Person person){
	printf("%d",person.id);
}
void main()
{
	//函数指针,调用函数的,定义:函数返回类型,(*f),函数参数类型列表
	void(*f)(struct Person)=printPersonInfo;
	
		//函数内存地址
	printf("%d\n",printPersonInfo);	
	//通过指针调用函数
	(*f)(P);
}
  • 内存分配

//方法内部定义的变量在栈内分配,在方法结束后栈内存被回收
//解决,方法外部定义变量(全局变量),内存在静态存储区存放
//解决,方法内部定义,加一个关键字static,在内存静态存储区存放
//静态存储区变量生命周期作用于整个程序运行时
char* getStr(){
	char ch[]="hello word";
	printf("字符串ch地址%d\n",ch);
	printf("字符串内容%s\n",ch);
	return ch;//返回后,内存被回收了
}
void main()
{
	char* str=getStr();
	//与之前一样
	printf("str地址%d\n",str);
    //与之前不一样,内存已被回收
    printf("str地址%s\n",str);
}
  • 堆内存

//堆内存 解决方式
//堆内存 java ,c++ Object o= new Object();
//堆内存 c  void* v= malloc(申请内存字节大小)// void 可以指向任意类型
//堆内存 程序退出也不会回收,需要程序员回收 free(void*)
char* getStr(){
	char ch[]="hello word";
	//字符串放到堆内存
	void* v= malloc(sizeof(ch));
	//ch copy到v指向堆内存 memcpy(void* des,void* src,int size);
	memcpy(v,ch,sizeof(ch));
	printf("字符串v地址%d\n",ch);
	printf("字符串内容%s\n",ch);
	return v;
}
void main()
{
	char* str=getStr();
	printf("str地址%d\n",str);
    printf("str地址%s\n",str);
}
  • 预处理指令

//程序编译时处理
//常用
# define PI 3.14; //定义PI为3.14,使用时每次用PI
# define max(x,y) x>y?x:y 
#include<stdio.h> //将stdio.h文件包含进来,编译时处理
  • 文件读写字节方式

//用fopen从硬盘,以读的方式导入内存,返回文件指针
//需导入stdio.h文件,FILE是结构体
main(){
    //param1,文件在硬盘文件名,param2文件操作 r读,w写 ,a二进制
    FILE *f1=fopen("file1.c","r");
    FILE *f2=fopen("file1.txt","w");
    //fgetc(FILE *_File)读取文件,读取一个字节内容,返回int,-1结束;每调用一次文件指针向下移
    //EOF,宏定义代表-1
    //fputc(int _ch,FILE *_File),将_ch 字节内容,存放到*_file所指的文件
    int c;
    while((c=fgetc(f1)!=EOF){
        printf("%c",c);
        fpuc(c,f2);
    }
    //关闭文件,回收内存,写的话,将内存文件写入硬盘
    fclose(f1);
    fclose(f2);
    //c代码执行当前系统下命令,例windows
    System(“notepad file1.txt)
}
  • 输出文件打印行号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值