我在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=#
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) #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这不起作用.为此,我认为一个概念,*b并a在值相同,但他们在不同的类型.由a指针和值给出的值*b是一个整数,所以**b不可能像*a.
但我仍然认为它应该有效.
我使用的是Dev C++ 4.9.9.2,它是一个32位编译器.分配给int …