指针和数组
指针对于数组特别有用。
当定义各一个数组时, 系统会在内存中为该数组分配一个存储空间, 其数组的名称就是数组在内存中的首地址.若再定义各一个指针变量,并将数组的首地址传给指针变量,则该指针就指向了这个一维数组.
例如:
int *p, a[5];
p=a;
这里a是数组名, 也就是数组的首地址, 将它赋给指针变量p, 也就是将数组a的首地址赋给p.
也可以写成如下形式:
int *p, a[5];
p = &a[0];
使用指针c语言int,我们可以指向第一个元素,然后使用地址算法遍历数组: +用于向前移动到存储位置 -用于向后移动到存储位置
int a[5] = {22, 33, 44, 55, 66};
int *ptr = NULL;
int i;
ptr = a;
for (i = 0; i < 5; i++) {
printf("%d ", *(ptr + i));
}
程序输出为:22 33 44 55 66
数组的一个重要概念是c语言int,数组名称充当指向数组第一个元素的指针。

因此,语句 ptr = a 可以认为是 ptr =&a[0]。
【填空题】以下代码的输出是什么?
int a[5] = {22, 33, 44, 55, 66};
int *ptr = a;
int res = *(ptr + 2);

printf(“%d”, res);
更多地址算法
地址运算也可以视为指针运算,因为操作涉及指针。
除了使用+和–来引用下一个和上一个存储器位置之外,还可以使用赋值运算符更改指针包含的地址。
例如:

int a[5] = {22, 33, 44, 55, 66};
int *ptr = NULL;
ptr = a; /* point to the first array element */
printf("%d %xn", *ptr, ptr); /* 22 */
ptr++;
printf("%d %xn", *ptr, ptr); /* 33 */
ptr += 3;
printf("%d %xn", *ptr, ptr); /* 66 */
ptr--;
printf("%d %xn", *ptr, ptr); /* 55 */
ptr -= 2;
printf("%d %xn", *ptr, ptr); /* 33 */
程序输出类似于:
22 febd4760
33 febd4764
66 febd4770
55 febd476c
33 febd4764
你也可以使用 ==创业项目, 运算符比较指针地址。
【选词填空】使用自增运算符增加指针并输出存储的值:

intarr[]={1,2,3};
int*ptr=arr;
ptr;
printf(“%d”,);
&ptr
++
*ptr
ptr
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。