关于C的复习
来源:互联网 发布:淘宝卖虚拟商品 编辑:程序博客网 时间:2024/05/21 00:16
1.
#include<stdio.h>
void main(){
char p;
char buf[10]={1,2,3,4,5,6,9,8};
p=(buf+1)[5];
printf("%d\n",p);
}
打印结果为9。 此题buf表示数组的首地址,相当于一个指向数组首地址的指针常量,buf+1表示指针指向数组首地址之后一个,(buf+1)[5]表示从(buf+1)开始,下标为5的元素。
2.
#include<stdio.h>
void main()
{
int a[][3]={1,2,3,4,5,6};
int (*ptr)[3]=a;
printf("%d,%d,%d,%d\n",(*ptr)[1],(*ptr)[2],(*ptr)[3],(*ptr)[4]);
}
打印结果2,3,4,5
int (*ptr)[3]是一个数组指针,指向a数组,二维数组按行存储。因为数组里面的元素是连续存储的,所以(*ptr)[3],(*ptr)[4]也是可以打印出来的。
3.
3.1
#include<stdio.h>
void main()
{
struct
{
char a;
short b;
float c;
}cs;
printf("%d\n",sizeof(cs));
}
需要考虑到系统在存储结构体变量时的地址对齐问题,结果为8
偏移量指的是结构体变量中成员的地址和结构体变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。显然,结构体变量中第一个成员的地址就是结构体变量的首地址。因此,第一个成员a的偏移量为0。第二个成员b的偏移量是第一个成员的偏移量加上第一个成员的大小
存储变量时地址要求对齐,编译器在编译程序时会遵循两条原则:
(1)结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍)
(2)结构体大小必须是所有成员大小的整数倍,也即所有成员大小的公倍数。
3.2结构体中包含数组
struct ss
{
float f;
char p;
int a[3];
};
其值为20。float占4个字节,到char p时偏移量为4,p占一个字节,到int adf[3]时偏移量为5,扩展为int的整数倍,而
非int adf[3]的整数倍,这样偏移量变为8,而不是12。结果是8+12=20,是最大成员float或int的大小的整数倍。
3.3
结构体中包含结构体
4.strcmp
strcmp(char *s1,char *s2)
s1==s2,返回0
s1>s2,返回一个正数
s1<s2,返回一个负数
- 关于C的复习
- 复习关于C的结构体struct
- 【C++】关于继承、多态的重点部分复习
- 关于数据库的复习
- 关于指针的复习
- C基础的复习
- C的复习
- C的复习2
- C的复习3
- C语言的复习
- 关于橡皮筋类的复习 .
- 关于迪杰斯特拉算法的复习
- 关于日照市复习的事
- C++关于类的复习
- 关于堆的知识复习
- 关于指针的复习知识点
- 关于EL表达式的复习
- 我复习C 的记录
- EXC_BAD_ACCESS异常 _block_invoke 问题
- 设计模式----开篇
- hostapd wpa_supplicant madwifi详细分析(十)——wps原理及实现 二
- Python Strip()函数
- iOS 将Log日志重定向输出到文件中保存
- 关于C的复习
- Mac OS X用当前选中的文字生成便签的快捷键是什么
- java字符串
- leetcode #97 in cpp
- SharePoint Document Library中的"Versioning Settings"功能与CSOM的对应
- JSF基本搭建流程
- Time类中的运算符重载
- How to use Qt’s QSortFilterProxyModel
- python中关于with及contextlib的用法