黑马程序员技术交流社区
标题:
指针与数组
[打印本页]
作者:
huangsailin
时间:
2015-7-19 13:12
标题:
指针与数组
1)数组名就是一个指向数组首地址的指针常量。对于指针数组符号’[]’相当于指针符号’*’,所以数组元素的地址有下面几种表示:
&a[0].......&a[i] a................a+i pa.............pa+i
从技术上可以说数组就相当于指针,但是在声明一个数组,C语言编译时会分配一段固定的连续空间,而声明一个指针却不会。
2)实际上C语言只有一维数组。多维数组其实可以理解为指针数组和普通数组的结合。
例如,char a[2][5];可以理解为一个char *a[2]数组,里面的每个元素分别指向一个char b[5]数组。
在二维数组x中,数组名x表示数组的首地址,x[i]表示一个一维数组的名称,(也就是说x[i]不保存元素值),它只是一个地址。x和x[i]的值相等,但是*a!=*a[0],因为a是一个二维数组首地址指针,a[0]一个一维数组首地址指针,引用它们指向的变量时会根据自己类型性质定义变量的类型性质。如下代码:
void main()
{
char a[2][6]={"Hello","World"}; char * p; p = a;
if(a==a[0])
printf("a==a[0]\n"); if(*a==*a[0])
printf("*a==*a[0]\n"); if(*p==*a[0])
printf("*p==*a[0]\n"); printf("%d\n",sizeof(a)); printf("%d\n",sizeof(a[0])); getch(); }
运算结果: a==a[0] *p==*a[0] 12 6
x[i]表示数组的首地址,x[i][j]表示数组x[i]的第j+1个元素的值,&x[i][j]返回数组x[i]的第j+1个元素的地址。也可以使用*(x[i]+j)的方式表示第j+1个元素的值,而*(x[i]+j)又可表示为*(*(x+i)+j)。
3)指针的运算:赋值、间接运算、求地址、递增、递减、求差、比较。指针加上后减去一个整数偏移的长度等于这个整数乘以指针所指数据类型的长度。如下面的代码:
int main()
{
unsigned int i;
unsigned int *p = &i; printf("%d %d",p,p+1); getch(); }
运行输出: -58 -56
作者:
默凉雨
时间:
2015-7-19 21:48
厉害!!!
作者:
爱马尚
时间:
2015-7-19 21:51
杠杠的!!!
作者:
shorfng
时间:
2015-7-19 21:56
后天才学╮(╯▽╰)╭
作者:
ylxkab
时间:
2015-7-20 09:14
又回顾了一下知识,对自己的理解有帮助,赞一个
作者:
562413895@qq.co
时间:
2015-7-20 11:22
总结的还可以
作者:
huguozhang
时间:
2015-7-20 23:35
顶一个~~~~~~
作者:
wdcew
时间:
2015-7-21 00:26
不错 支持一下!!!!
作者:
杨远鹏
时间:
2015-7-21 00:28
兄弟,水得一手好帖啊~
作者:
Xia_
时间:
2015-7-21 00:34
好厉害啊:lol:lol:lol
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2