C语言初学者,请教数组指针问题

小乞丐 发布于 2013/08/20 16:54
阅读 384
收藏 0
#include<stdio.h>
int main(void)
{

    char p[12] = "Hello Word!";
    char (*q)[12]  = &p;
    printf("%s \n",*q);
    printf("\n");
    int a[5] = {1,2,3,4,5};
    int (*a1)[5] = &a;
    printf("%d \n",*a1);
    return 0;
}


为什么char和int都是一个数组。

同样的方式获取指针指向地址的值,得到的结果不一样呢?

如果int数组跟char类似。那么*a1得到的结果应该是1,2,3,4,5呀。

初学几天C,不太明白~还请大家解释下。谢谢。~

加载中
0
小熊猫大暴走
小熊猫大暴走

printf(%s,p); printf会认为p是一个地址,指向一个字符串.

printf(%d,p) printf会认为p是一个值.而你的程序 *a1是一个地址,因此把地址当成值打印出来是没错的.

#include<stdio.h>
int main(void)
{

    char p[12] = "Hello Word!";
    char *q  = p;
    printf("%s \n",q);
    printf("\n");
    int a[5] = {1,2,3,4,5};
    int *a1= a;
    printf("%d \n",a1);
    return 0;
}

Red54
Red54
回复 @怪兽狂殴奥特曼 : 你逻辑是不是有问题,楼主想要输出数组结果却输出地址值,所以才会过来问,那怎么不是想要输出数组?
小熊猫大暴走
小熊猫大暴走
回复 @謝振之 : 人家想要得到的是为什么输出的不是数组而是值的原因,而不是想要输出数组................................................好好看看吧.联系上下文,进入语境.好好体会语文的重要性.
Red54
Red54
回复 @怪兽狂殴奥特曼 : “那么*a1得到的结果应该是1,2,3,4,5呀。 ”
小熊猫大暴走
小熊猫大暴走
回复 @謝振之 : 你看看lz说的地方哪里想要输出数组?
Red54
Red54
回复 @怪兽狂殴奥特曼 : 你也好好看吧,楼主的意思就是要输出数组。
下一页
1
mallon
mallon
指针就是内存地址
0
小耶果
小耶果
@中山野鬼 ,你的任务来了.
0
中山野鬼
中山野鬼

q 是个指针空间,它里面存放的数据是指向一个地址,而该地址是一个空间,这个空间包含12个字符单元。

问题是,你将 p自身存放的地址给了q。 p是个空间,里面存放了个地址,这个地址指向了一个空间,里面有12个字符。

你给的是p所在空间的地址,而不是p里面存放的地址。不知道是否理解了。

0
小小Summer
小小Summer

你把第一个printf里的%s改成%d试试

0
i
ibmo

q 和 a1 都是数组指针,那么 *q 和 *a1 得到的应该都是数组,  如果数组充当函数变量的话,该数组就会被转换为指向数组第一个元素的指针,所以说两个 printf() 的参数都是两个数组第一个元素的地址。

使用下面的例子就可以看出来:

#include<stdio.h>
int main(void)
{

    char p[12] = "Hello Word!";
    char (*q)[12]  = &p;
    char (*q1)[12]  = &p[0];
    printf("%s \n",*q);
	printf("%p \n", q);
	printf("%p \n", q1);
    printf("\n");
    int a[5] = {1,2,3,4,5};
    int (*a1)[5] = &a;
    int (*a2)[5] = &a[0];
    printf("%d \n",*a1);
	printf("%p \n", a1);
	printf("%p \n", a2);
    return 0;
}

0
泡不烂的凉粉
泡不烂的凉粉

(*a1)[] 是一个数组指针. 存放的内容都是指针. 所以 *a1 肯定是一个指针.

你要输出内容. 需要 **a1. 否则你输出的只能是一个指针.


0
t
thegreatchaos

printf("%s\n", *q), 按照字符串打印, 字符串是以'\0'结尾, 而print("%d\n", *a1)是以整型打印, 即便q[0] = &p, a1[0] = &a.

a1是存放地址的指针数组, 这个结果应该是0x01638180内存地址值

0
番茄12
番茄12
看看书。
返回顶部
顶部