指针总结(—)
来源:互联网 发布:大众软件电子版 pdf 编辑:程序博客网 时间:2024/06/05 17:12
1:指针常量
*100=25 (假设100是a的地址,如果你想把a的值改成25,使用*100=25是否可以?)
答案:这样做是错误的,字面值100的类型是整形,而解引用操纵只能对指针类型进行操作,所有应该成 *(int *100)=25;
2:指针变量p
a:指针变量p里面存储的任何数据都被当作地址处理。
b:指针变量的大小和*前面的数据类型无关。
c:*前面的数据类型只能说明指针指向变量的数据类型。
d:声明不需要分配空间,而定义需要,所以:
int a[100];和int a[];作为声明没有什么区别
f:定义为指针,声明为数组:
add.c
<pre name="code" class="html"><span style="color:#330000;">char *a="abcdef";</span>
test.c
#include <stdio.h>extern char a[];extern print();int main(){ print(); printf( "%p\n", a); printf( "%s\n", a); printf( "%s\n", *(char **)a); printf( "%s\n", (char *)*(int *)a); return 0;}
3:数组指针和指针数组
int *p1[10] //数组指针
数组指针:*p1[10];
根据运算符优先级的关系,下标运算符的优先级高于*运算符,所以数组名p1先和【10】结合,表示数组的大小为10个元素的大小,随后p1[10]在于int *结合,表示数组中元素的类型为指向整形的指针类型。
指针数组:int (*p2)[10];
理解:表示的是一个能指向10个整型元素的数组的指针,注意是指针,而不是数组。
那怎样对指针数组进行引用呢:
int arr[10];
int (*parr)[10]=&arr;
下来我们来看这样两行代码:
int *arr[10]; // 数组指针 int(*parr)[10]=arr; //指向数组的指针
我们想通过数组指针对指向数组的指针进行引用,于是传递给指针数组一个数组名arr,但编译器发出以下警告:
warning C4047: “初始化”:“int (*)[10]”与“int **”的间接级别不同
原因是:arr是指针数组arr[10]的首地址,而arr[10]中元素的类型都是int *类型,所以arr的类型就为int **,所以编译器发出了警告。
如要正确引用:需把整个数组的地址传递给指针数组,而不是首地址,并且要把指针数组的类型强制转化为(int *)类型,因为数组指针arr中,元素的类型为int *型。
总结:初学小白,如有描述不当之处欢迎指出!!!
2 0
- 指针总结(—)
- 指针总结(二)
- 指针学习总结(数组指针,指针数组)
- 指针学习总结(函数指针,指针型函数)
- C——指针总结
- C——指针总结
- 指针管理总结(一)
- 指针和数组(总结)
- 指针内容总结(一)
- C语言入门——指针(一)自学总结
- C_C++指针指针总结
- 指针总结
- 指针 总结
- 指针总结
- 指针总结
- 指针总结
- 指针总结
- 指针总结
- 微信JS-SDK说明文档---自己总结了config时的参数获取方式
- 04.Java 基础 - 类
- LEIJP玩什么游戏(hash黑算法)
- Android Service学习之IntentService 深入分析
- logback.xml文件配置
- 指针总结(—)
- 泛型继承的几种写法
- HDU 1335 (16进制以下)把m进制转换为n进制
- 19.Remove Nth Node From End of List
- 洛谷1028
- Scala-02:函数定义、流程控制、异常处理入门实战
- Android四大组件之一——Broadcast Receiver
- Eclipse下如何运行微信SDK_Demo
- RxJS入门(3)----深入Sequence