
int (*p)[3]表孝乎滚示定义了一个指针p,这个指针p指向int *[3]这种类型的数据。
int *p[3]表示定义了三个指针,每个指针都指向顷拍int *这种数据。
也就是第巧余一种情况 p + 1 指针会向后移动3个int的长度。
#include <stdio.h>弯卖
main()
{
float score[10]
float temp
int i,j
float *q,*p = score
printf("埋姿逗input 10 scores:\n"册嫌)
for(i=0i<10i++)
scanf("%f",p++)
p = score
printf("\n")
for(p = scorep<score+9p++)
{
for(q=p+1q<score+10q++)
{
if(*p>*q)
{
temp = *p
*p = *q
*q = temp
}
}
}
printf("the sorted numbers :\n")
for(p = scorep<score+10)
printf("%5.2f,",*p++)
printf("\n")
}
int **a可以表达一个二维数组。为什么呢?
你可以这么理解 * p[3]表达的是一个数组指针,这个指针 p[0]表示的是数组存的第一个地址。而数组实际上是一串连续地址的块。每一个小块存着一个内容。每次访问数组时,你为什么可以用数组名+下标访问呢? //比如a[i];
实际上就是 访问*a+i 睁唯 * 这个符号可以表示你存的是变量的地悉瞎培址。而数组地址的第一位为int类型变量存的地址(你可以直接使用数组的地址加上单位变量的空间的大小去访问下个元素)。在这个程序中int *p[3] 表示可以存三个int 类型的地址。而p正好把二维数组的三个一维数组的开头的int类型变量的地址给存起来了。
给你举个例子
我现在输出的是地址,是不是连续的?
用*运算符获取地址的内容。
实际上神改p[i]与 *(p+i)是表达的是同一个意思。只不过只有数组可以定义一个连续的空间
(数组的第一个地址是随机的其他的是连续的。)单独用指针的话会随机分配的
数组的指针可以存三个地址。当然可以访问二维数组了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)