对一些指针数组的理解
来源:互联网 发布:艺恩数据 电视剧网播 编辑:程序博客网 时间:2024/05/29 19:58
======================
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=? a[2],q与p的值相差2,指针一次移动一个int但计数为1
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=? a[2],q与p的值相差2,指针一次移动一个int但计数为1
===========================
void main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,
不同类型的指针+1之后增加的大小不同
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
但是prt与(&a+1)类型是不一样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
================================================{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,
不同类型的指针+1之后增加的大小不同
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
但是prt与(&a+1)类型是不一样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
1 0
- 对一些指针数组的理解
- 对指针数组,数组指针,函数指针数组,函数数组指针的一些简单理解
- 对数组指针的理解
- 对“数组指针”的理解
- 对数组指针的理解
- 对指针数组的理解
- 对智能指针的一些理解
- 对指针的一些深入理解
- 数组和指针的一些理解
- 关于数组和指针的一些理解
- 对多维数组与指针的理解
- 对数组和指针的基础理解
- 对C++中的指针数组的理解
- 对指针与数组名的理解
- 对指针和数组名的理解
- 加深对指针和数组的理解
- 对指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
- 对指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针的理解
- VMware中linux系统的网络设置
- 图像聚类-谱聚类
- 字符数组与字符指针数组的区别
- [个人博客搬运]JavaEE自定义标签技术
- window.location在IE中路径问题
- 对一些指针数组的理解
- 【LeetCode】Container With Most Water 解题报告
- GPU开发环境
- Storm JAVA_HOME is incorrectly set
- Android 任务管理器分析小结
- 面试需要问到的11点
- Java—BIO (Block IO)
- Linux 技巧:让进程在后台可靠运行的几种方法
- 常见验证码的弱点与验证码识别