小编mel*_*ony的帖子

给定`int num [7]`,`num`,`&num [0]`,`&num`如何不同?

我在C书中读到,对于数组来说,num[7]这个术语num相当于&num[0].这个概念对我来说很好,但是当我写下这个程序时,我再次感到困惑.

#include<stdio.h>
#include<conio.h>
int main()
{
    int num[]={21,22,23,24,25,26,27};
    int *x,*y,*z;
    x=&num;
    y=num;
    z=&num[0];
    printf("%d   %d   %d\n",sizeof(x),sizeof(y),sizeof(z));
    printf("%d  %d  %d\n",sizeof(&num),sizeof(num),sizeof(&num[0]));
    printf("%d   %d   %d",*(&num),*(num),*(&num[0]));
    getch();
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

输出是:

      4    4    4
      4    28   4
      2293536   21   21
Run Code Online (Sandbox Code Playgroud)

如果num与之相同,&num[0]为什么它们的尺寸会有所不同?这第三类术语是&num什么?我知道它显示了垃圾值,但这种类型的术语是否有意义?z=&num[0]我已经明白了.编译器显示赋值的警告x=&num,但 y=num;编译器没有任何问题.如果num有大小28那么为什么它被分配给y没有类型转换的整数指针?

然后我用这种方式尝试二维数组:

#include<stdio.h>
#include<conio.h>
int main ()
{
    int s[4][2]={{1234,56},{1235,57},{1236,58},{1237,59}};
    int i
    printf ("\n%d %d %d %d %d",sizeof(s[i]),sizeof(&s[i]),sizeof(s),
        sizeof(s[0][0]),sizeof(&s));
    getch(); …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

11
推荐指数
2
解决办法
1268
查看次数

为什么使用指针的代码不使用b检索x的值?

#include <stdio.h>
int main (){
int x=10,*a=&x;
int *b=(int *)&a;
printf("%d  %d  %d  %d  %d  %d  ",x,a,*a,b,*b,**b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这个小程序变量x中赋值10,然后将地址x分配给指针变量a.现在正确的方法是int **b=&a因为b应该是一个指向指针的指针.但我认为这最终是存储的地址.所以要存储a一个int指针的地址b,我使用类型转换int *b=(int *)&a.现在a存储的地址b.所以,如果我使用*b,它给出相同的结果a.

但是,当我进一步扩展到**b 它时,它没有给出*a我预期的相同结果.实际上它会出错.*b并且a是相同的,所以,当我问到这样从值获取**b*a这不起作用.为此,我认为一个概念,*ba在值相同,但他们在不同的类型.由a指针和值给出的值*b是一个整数,所以**b不可能像*a.

但我仍然认为它应该有效.

我使用的是Dev C++ 4.9.9.2,它是一个32位编译器.分配给int …

c pointers

2
推荐指数
1
解决办法
131
查看次数

标签 统计

c ×2

pointers ×2

arrays ×1