C基础中的知识点

来源:互联网 发布:增加人脉的软件 编辑:程序博客网 时间:2024/04/30 01:25

二进制与八进制,十六进制的转换

二进制的3位相当于8进制的1位

二进制的4位相当于16进制的1位

getchar() 从键盘获取一个字符,有返回值,返回获取的那个字符,没获取字符将一直等待

getchar()函数可用作吸收残留的回车键,放在scanf后面

字符加单引号表示ASCII码值

字符常量是用单引号包围的单个字符 1.普通字符常量 2.转义字符常量

switch(表达式)

{  

     case  常量:


}

 数组的内存空间大小是从定义的时候就分配好的,数组元素存在于连续的内存中,所以在定义数组的时候,数组元素的个数必须是个确定的值,即可以是普通常量或符号常量,不能是个变量。

注:不能整体访问一个数组,只能访问数组的元素。


1.数组名,表示该数组的首元素的首地址

2.一个指向数组元素的指针,+1表示它指向下一个元素的位置.

eg:

#include<stdio.h>

void main()

{

int a[5]={1,2,3,4,5};       //a相当于int 型的常量指针,不是变量指针,指针指向数组首元素的地址

printf("%p,%p\n",a,&a[0]);

int*p=&a[0];

printf("%p,%p\n",p+1,&a[1]);

printf ("%p\n",a+1);

}

1.数组名:a,表示该数组首元素的首地址,作为一个指针,指向的对象是这个数组里面的的元素,a+1表示它的位置偏移一个它所指对象的长度.

2.&a,表示对整个数组这段连续内存取地址,它作为一个指针的时候,它所指的对象是整个数组这块连续内存,&a+1表示它的位置偏移一个它所指的对象长度,到达了数组尾.

3.p+n=p+n*sizeof(p所指的对象类型)

eg:

#include<stdio.h>

void main()

{

inta[5]={1,2,3,4,5};

printf("%p,%p\n",a,&a); //取一个数组名的地址所产生的是指向数组的指针,&a的类型则相当于int **,是所谓指向数组

的指针,*操作符

具有从右向左的结合性,即int **a相当于int *(*a)

printf("%p,%p\n",a+1,&a+1);

}

结果为:

0xbfff024c,0xbfff024c

0xbfff0250,0xbfff0260


 

int*a[5] ;一个指针数组a,数组里的每个元素都是一个指向int型数据的指针

int(*p)[5];一个指针,指向数组5int型元素的数组 // P+1表示移动5个int型字节


二维数组可以把它看成是一个一维数组,一维数组里面每一元素都是单个数据,二维数组里面每个元素都是一个数组,所以,二维数组可以看成是以数组为元素的一维数组,即数组的数组,在存储的时候是以数组,按行的方式存储的。

eg:

int a[2][3]={{1,2,3},{4,5,6}}; 2行3列,第一个元素为第一行,第二个元素为第二行。

        可以理解为:a[0]={1,2,3}
                                a[1]={4,5,6}

#include<stdio.h>
void  main()
{
int a[4][5]={1,2,3,4,5,
     6,7,8,9,10,
     11,12,13,14,15,
16,17,18};//可以把该二维数组看成是含4个元素的一维数组
/*printf("%p\n",a);//a,该数组的首元素的首地址,在该处首元素也就是第一行,在数字1的位置作为指针,指向的对象是行
printf("%p\n",a+1);//a+1即跨过一个该指针指向的对象的长度,到了数字6的位置
int (*p)[5]=a;
printf("%p,%p\n",p,p+1);

               printf("%p\n",*a); //第一行地1列的地址


       printf("%p\n",*a+1);  //第1行第2列的地址
       printf("%p\n",*(a+1));  //第二行地一列的地址
       printf("%p\n",*(a+1)+1);  //第二行第二列的地址
       printf("%p\n",&*(a+1));  //指向第二行的指针
       printf("%p\n",&*(a+1)+1);//指向地3行的指针
       printf("%d\n",*(*(a+1)+1));  //a[1][1]
   } 注:二维数组名,表示指向首行的地址,对象是行,在指向行的指针前面加一个*,就转换为指向列的指针;      在指向列的指针的前面加一个&,就成为指向行的指针(指针要在每一行的首位才行)


     字符串一般存放在数组中时,输入用getchar();输出直接用%s 加数组名即可。


strlen();计算字符串中字符的个数,并将字符的个数作为这个函数的返回值在计算字符串中字符个数的
时候不计算表示字符串结束的'\0'字符。

结构体

1.struct 2.student 3student1 (1.表示结构体标志 2.表示结构体名 3.表示结构体变量)

可以用一个结构体变量给另一个结构体变量整体赋值,不可以对结构体整体操作,只可以操作里面的成员变量

eg:

struct   student student1={1,"xxx",'m',90};

struct   student student2;
student2=student1;

2. 结构体指针变量:一个专门用来指向结构体变量的指针

指向一个结构体变量的指针的值是这个结构体变量的首地址

结构指针变量定义的一般形式:

struct 结构体名  *p

通过结构体指针变量可以访问结构体成员

一般形式为:结构体指针变量->成员名

3.结构体数组

struct  student stu[2];结构体数组的引用结构体数组名[下标号].成员名eg:stu[0].num=102;
用指针变量的方式给结构体复制#include<stdio.h>
struct student
{
int num;
char name[20];
char  sex;
float score;
};
void  main()
{
 struct student stu[2];
 struct student *p=stu; //表示p指向结构体数组的首地址
    for(p=stu;p<stu+2;p++)
{
printf("pleaseinput data:");
scanf("%d %s %c %f",&p->num,p->name,&p->sex,&p->score);
getchar();//输入格式符之间留有空格,可以避开%s%c的弊端.
}
for(p=stu;p<stu+2;p++)
{
printf("outputstu[%d]:",i);
               printf("%d %c %f %s\n",p->num,p->sex,p->score,p->name);
}
}

0 0
原创粉丝点击