没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1,指针,区分*p++ , (*p)++, *(p++), *p+2,; 指针是一个变量,定义指针变量,占4字节。变量是固定大小内存块的别名,则此内存块(4字节)中存放的是指针要指向的地址空间的首地址。初始化 指针为NULL时,则此处存放的地址为0,如果要用指向别的地方,那么需要与malloc并用,由malloc开辟一段空间,并将该段空间的首地址存放与指针变量中。 *,++; 这两个符号的运算优先级相同,运算顺序由右向左。如下 分析上述4种表达式的运算顺序, 1)由于运算顺序由右向左,则*p++ 与 *(p++)和*(p+1)结果相同,先计算++,再*解引用,结果是先进行指
资源详情
资源评论
资源推荐
指针指针(*p++ , (*p)++, *(p++), *p+2)与结构体遍历与结构体遍历
1,指针,区分,指针,区分*p++ , (*p)++, *(p++), *p+2,,;
指针是一个变量,定义指针变量,占4字节。变量是固定大小内存块的别名,则此内存块(4字节)中存放的是指针要指向的
地址空间的首地址。初始化 指针为NULL时,则此处存放的地址为0,如果要用指向别的地方,那么需要与malloc并用,由
malloc开辟一段空间,并将该段空间的首地址存放与指针变量中。
*,++; 这两个符号的运算优先级相同,运算顺序由右向左。如下
分析上述4种表达式的运算顺序,
1)由于运算顺序由右向左,则*p++ 与 *(p++)和*(p+1)结果相同,先计算++,再*解引用,结果是先进行指针位置移动,再取
值,比如一个字符串”hello”, 用char *p = “hello”, 以上表达式取出第二个字符是e;
2)(*p)++括号的优先级最高,则先进行解引用,再++,所以结果是值+1。 比如”14890″, char *p = “14890”, (*p)++,运行一次
取出第一个值为1,然后+1, 值是2.
3)*(p+2),++是运算符,而+2是表达式,+号的运算符号等级是比++低的,必须带括号,多用于二维数组。
比如 int *array[5], 这个意思是说有一个数组,它有5个int*指针类型的元素。这是一个指针数组,它的每个元素都是一个指
针,假设此时int *p指向array,那么p+2就指向了array[2]号元素。指针数组可以理解成行和列,就是指向了第3行。
4)同理,推算数组b[10], &b+1, &(b+1); &b+n是求出整个数组的地址 +n*sizeof(b), &(b+1), 是求出b的第2个元素的地址。
2,由指针想到的结构体,遍历结构体是否有必要,由指针想到的结构体,遍历结构体是否有必要
定义一个结构体,
typedef struct Temp{
char member1;
int member2;
int member3;
char member4;
}Temp_t;
用#pragma pack(1)保持1字节对齐, 那么四个元素的偏移地址为{0, 1, 5, 9};
我们知道,如果打印出一个元素的值可以用两种方式:
对于 Temp_t T1, 使用T1.member1;
对于Temp_t * T2, 使用T2->member1;
如果进行一个拥有20个成员的结构体赋值,则需要如上方法操作20遍,似乎感觉很麻烦。
首先要明白,结构体中的成员赋值都是计算首地址的偏移地址,所以如上可以把首地址存到一个数组里,然后进行循环赋值,
这个想法是不是很好?
1)对于成员变量类型相同类型相同的结构体,有两种方法,
其一:使用for循环一个TYPE类型的数组,然后赋值,比如
weixin_38623009
- 粉丝: 5
- 资源: 906
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0