指针和数组

47 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

#include <stdio.h>

main()

{

int a;

int *p = &a;

printf("请输入一个整数");

scanf("%d",&a);

printf("a = %d\n",a);

printf("请重新输入一个整数");

/此处不需要取地址符&,加上后就变为了指针P的地址,并不能对a的值改变/

scanf("%d",p);

printf("a = %d\n",a);

return 0;

}

图片.png

图片.png char a[] = "modle";

int b[5] = {1,2,3,4,5};

float c[5] = {1.1,1.2,1.3,1.4,1.5};

double d[5] = {1.1,1.2,1.3,1.4,1.5};

/因为每个数组为一个变量所以数组要加取地址符/

/当使用地址名时则不需要加取地址符/

printf("不加取地址符%p\n",a);

printf("a[0] -> %p,a[1] ->%p,a[2] -> %p\n",&a[0],&a[1],&a[2]);

printf("b[0] -> %p,b[1] ->%p,b[2] -> %p\n",&b[0],&b[1],&b[2]);

printf("c[0] -> %p,c[1] ->%p,c[2] -> %p\n",&c[0],&c[1],&c[2]);

printf("d[0] -> %p,d[1] ->%p,d[2] -> %p\n",&d[0],&d[1],&d[2]);

/每个地址加每个数组变量所属的类型大小,如int加四个字节/

图片.png 指针指向数组,将指针指向数组的数组名或者指向树组的首地址即可

其他数组通过指针可以进行调用使用;

Char a[];

Char *p;

P = a;

P =&a[0];

错误定义:

*pb = b;

通过对指针进行加减运算进行调用其他数组

P+1并不是简单地址加1而是指向下一个数组元素

由int pb就可以看出来,我们仅仅指向下一个数组并没有改变地址值,因为int每次地址改变四个字节。

 

char a[] = "modle";

int b[5] = {1,2,3,4,5};

char *p;

int *pb;

p = a;

pb = b;

printf("p = %c,(p+1) = %c, (p+2) = %c\n",p,(p+1),(p+2));

printf("pb = %d,(pb+1) = %d, (pb+2) = %d",pb,(pb+1),(pb+2));

定义为数组可以用指针下标调用,同样定义为数组也可以用指针调用

但数组和指针并不相同,仅有互通使用的用法。

没用到指针bp,直接以数组b进行指针调用输出。

Printf(“b = %d, (b+1) = %d,(b+2) = %d\n”,b,(b+1),(b+2));

 

插入char *str = “struggle work”;

Int i, length;

Length = strlen(str)/获取字符串长度/;

For (i = 0; i < length ; i++);

{

Printf(“%c”,str[i]);/用数组的形式调用指针的值/

}

Printf(“\n”);