关于指向数组的指针
关于指向数组的指针
燃烧NO1 发表于4年前
关于指向数组的指针
  • 发表于 4年前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 指向数组的指针

1:指向数组的指针
        1)指向数数组的指针:是指向数组地址的指针。
        2)赋值:指向数组的指针=&数组名
        3)取值时:(指向数组的指针)[i]
实例

#include<stdio.h>
#include<string.h>

int main()
{
        char caData[]="0123456789";
        char (*pa)[10+1];//定义了一个指向数组的指针
        char *p;//指向一个指向数组元组的指针
        int i;

        p = caData;
        for(; *p !='\0' ;p++)
        {
                fprintf(stderr," %c-",*p);
        }
        fprintf(stderr,"\n----------------------\n");
        pa = &caData;//给指向数组的指针赋值---------------------------KEY
        for(i = 0;i<10;i++)
        {
                fprintf(stderr," %c-",(*pa)[i]);//取数的关键(*pa)
        }

        return 0;
}
=================================================================================================
后补资料:
关于char (*p)[] 和char p[]的问题(转) (2006-12-26 21:56)
char (*p)[]是定义一个指向char型数组的指针.
char p[]是定义一个数组,p也是指针,只不过是常量.对吧?
#include <stdio.h>
int main()
{
        char (*p)[10] ;
        char a[10];
        p=a;
}
为什么提示
[root@localhost ~]# cc test.c
test.c: 在函数 ‘main’ 中:
test.c:6: 警告:从不兼容的指针类型赋值呢?

你把p=a 改成 p=&a就可以了。
这是c语言迷惑人的地方。很多书都告诉大家数组名就是数组的地址,但其实它是的数组第一个元素的地址,类型是char *。而&a 表示的才是数组的地址,类型是char (*)[10]。由于数组的地址在值上面和数组第一个元素地址的值是相同的,所以大家平时就认为&a和a是一样的,产生了误会。
所以,p=a的警告在于你把一个char型的地址赋给了一个char (*)[10]的指针。当然,这样做的结果没错,不过多了个警告。 //在vc7中试了一下,cpp文件连编译都过不了,c文件可以过。明显c++更严格,更妥当。by imjacob
 
 
--------------------------------------------------------------------------------
 
指向数组的指针 和 指针数组是不一样的
指向数组的指针char (*p)[10]表示p指的是一个数组,//?应该是一个指针。imjacob
p+1与p的差距是sizeof(char [10]),是移动指到另一个数组,这里sizeof(p)在32位机器上应该是4,指针的长度是4。
指针数组char *p[10],表示的是一个数组,数组中每个元素都是指针,这里sizeof(p)在32位机器上应该是40,=10 * sizeof(char*),这儿是数组的长度,而不是指针的长度,也说明他是个数组,跟指向指针的指针(char **p)也是不一样的
还不明白自己去看书了,不回复了

共有 人打赏支持
粉丝 24
博文 87
码字总数 67020
×
燃烧NO1
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: