关于C语言中的指针有关问题


关于C语言中的指针问题
#include<stdio.h>
int main()
{
int a[5]={1,2,3,4,5};
int (p)[5];
p=&a;  
printf("%d\n",(
p+2));
return 0;
}

/p=&a 这段代码的意思?
为什么 printf("%d\n",
(p+2))和printf("%d\n",(p+2));的结果都是随机数,分别代表的什么意思?
int (
p)[4]和int p[4]的区别?/


c语言 指针 程序开发

hebiu 12 years, 8 months ago


int a[5]={1,2,3,4,5};
这一行是5个元素的数组,数组就是指针。 相当于 inta;

int (
p)[5];
这一行是定义了有5个元素的指针数组。不是5个数,是5个指针。相当于 int*p;

p=&a;
这一行相当于把存放a这个指针的地址给了p,a是指向5个元素的指针,但是存放这个指针的地址有什么意义呢?无论想实现什么或者考试考什么,这行就可以认为是错的。p[0] = a; p+2 = a; ... 都是可以的。

printf("%d\n",(
p+2));
p没有意义后面就好理解了。

没试,谁有时间试试。

Psyche answered 12 years, 8 months ago


int (p)[5];定义一个指向存放5个int类型元素的数组的指针
p=&a,使p指向数组a的地址(a相当于&a)

为什么 printf("%d\n",
(p+2))和printf("%d\n",(p+2));的结果都是随机数,分别代表的什么意思?
-------------------------------------------------------
因为a是指向数组的指针,而不是指向数组元素的指针。


int (
p)[4]和int p[4]的区别?/
-------------------------------
int (*P)[4]定义的是个指针,该指针指向一个指向存放4个int类型元素的数组的指针
int *p[4]定义的是一个存放4个(int *)类型元素的数组,是一个int类型指针数组。

左手剪刀右手布 answered 12 years, 8 months ago

Your Answer