C语言基础

1.Switch(dat)语句dat必须为整型或字符型表达式,不能为浮点型float

2.exit()退出程序,准确是结束一个进程,无返回值

3.单目运算符结合性为自右向左,&P++,*P++

4.(void *)0 == NULL;c语言中指针的大小为4个字节

5.printf(“%p\n”, &a); %p格式化输出指针地址

6.int a = 10;

const int *p1 = &a;   // const修饰*p1,不能通过*p1方式改写指向的变量值,但是可以直接改写变量

int const *p2 = &a;   // const修及作用同上一句

int *const p3 = &a;   // const修饰p3,p3指针变量不能被改写

7.int a = 10;

Int **c;  // 定义指向指针变量的指针变量c

Int *b = &a;

c = &b;

8.pb – pa的结果为5而不是20;表面看起来pb,pa存储的是实际地址,并且相减,但是语法规定其结果只能是所指向数据的间隔数。

若需要实际地址相减的话,则(int)pb– (int)pa,结果为实际地址间隔20

 

9.int a[5];

a = &a[0] = &a;

对数组名取地址的结果就是数组首元素的地址

对数组取地址,类型可以当做指向此种数组的指针来使用,这里没有确定说它是指针

(&a + 1)指向数组末尾

 

int a[5];

&a + 1;   // 对数组名取地址表示该地址指向整个数组

*(*(&a + 1) - 1);   // 指向a[4]

 

Static int a[5];

等价于:a[0] =0;a[1] = 0;a[2] = 0;a[3] = 0;a[4] = 0;

 

10.

使用scanf输入字符串时,输入遇到空格、tab、回车换行,则默认结束输入。

例如:输入“how areyou”,则输入遇到空格时已经结束输入了。

 

11.

对结构体中数组成员进行初始化时,需要使用strcpy,不能像这样stu.name= “Mike”;

 

12.

使用typedef命名struct类型名为DATE

Typedef struct

{

       intmonth;

       intday;

       intyear;

}DATE;

可以使用DATE定义变量

DATE birthday;

DATE *p;

 

typedef int (*P)(int, int);

P p;  // p表示int(*p)(int, int)

Typedef int ARRY[10];

ARRY arry; // arry表示int arry[10]

 

 

13.

       int arr[]={6,7,8,9,10};

       int * p = arr;

       *(p++) += 123;   // 执行本条语句后,*p = 7

// *p++ = *p++ +123;  // 执行本条语句后,*p = 8

       printf("%d, %d\n",*p,*(++p));  // 先执行*(++p),再执行*p

14.利用左右结合性,观察指针指向,例如:

int ( *(*F)(int,int) )(int);

(1)先找到指针变量;’F’找到指针变量后,进来就一直往右,直到遇到’)’,才一直往左,若再次遇到’(’,则不往左,返回往右,再次遇到’)’时,不改变方向,继续往右

(2)往右遇到’)’,则往左看,’F’’*’结合;表示’F’为指针变量

(3)继续往左看,遇到’(’,则返回往右看,遇到之前的’)’,继续往右看,与(int, int)结合;

表示’F’是指向函数的指针,该函数有2int形参

(4)继续往右看,遇到’)’,则往左看,与’*’结合;表示’F’所指向的函数返回值为指针

(5)继续往左看,遇到’(’,则返回往右看,遇到之前的’)’,不改变方向,继续往右看,与(int)结合,右边没有了,则返回往左看,与int结合;表示’F’指向的函数的返回指针指向如int*fun(int)返回值为int,有1int形参的函数。

 

例题:

(1)   float(**def)[10];

(2)    double* (*gh)[10];

(3)   double(*f[10])(); 

(4)    int* ((*b)[10]);

(5)    long (*fun)(int);

答案:

(1) def是一个指针,它指向一个数组指针,而那个数组指针则指向一个有十个float变量的数组 ­

(2)gh是一个指针,它指向一个一维数组,数组元素都是double* ­

(3)f是一个数组,f10个元素,元素都是指向函数的指针(即函数指针),指向的函数类型是没有参数且返回double的函数。 ­

(4)就跟"int*(*b)[10]"是一样的,b是一个指向一维数组的指针。 ­

(5)函数指针。 ­

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值