指针和数组

简介: 一、指针与数组的概念及其区别 二、指针数组案例三、数组名的真实身份四、指向数组的指针五、指向的运算

指针和数组

 

内容介绍:

一、指针与数组的概念及其区别

二、指针数组案例

三、数组名的真实身份

四、指向数组的指针

五、指向的运算

 

 

一、指针与数组的概念及其区别

 

指针和数据是相像的而不是相同的概念。

 

概念:

数组:数组是用于储存多个相同类型数据的集合。

指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。

 

区别:

 

1.赋值:

同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝

 

 

2.存储方式:

数组:数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的,多维数组在内存中是按照一维数组存储的,只是在逻辑上是多维的。

数组的存储空间,不是在静态区就是在栈上。

 

指针:指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存。

由于指针本身就是一个变量,再加上它所存放的也是变量,所以指针的存储空间不能确定。

 

二、  指针数组案例

 

#incLude <stdio.h>

int main( )

{

int a;

int *p = &a;

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

scanf ("%d",&a);

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

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

scanf("%d", p);

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

return 0 ;

}

 

#include<stdio.h>

int main( )

{

char str[128] ;

printf("请输入鱼C的域名: ");

scanf(“%s”,str) ;

printf("C工作室的域名是: %s\n"str);

return 0 ;

}

 

 

三、  数组名的真实身份

 

数组名其实是数组第一个元素的地址!

 

代码:

 

#include <stdio.h>

int main()

{

char [] = "FishC";

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

float c[5] ={1.1,2.2,3.3,4.4,5.5};

double d[5] ={1.1,2.2,3.34.4,5.5};

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

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

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

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

return 0;

}

 

四、指向数组的指针

如果用一个指针指向数组,应该怎么做呢?

Char *p;

p = a;//语句1

p =&a[0]; //语句2

 

数组指针指向的是数组中的一个具体元素,而不是整个数组,所以数组指针的类型和数组元素的类型有关,上面的例子中,p 指向的数组元素是 int 类型,所以p 的类型必须也是int*

 

五、  指针的运算

1.当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于指向距离指针所在位置向前或向后第n个元素。

 

2.对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法

 

3.需要郑重强调的是: p+1并不是简单地将地址加1而是指向数组的下一个元素。

 

 

代码:

#include <stdio.h>

int main()

{

char [] = "FishC";

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

float c[5] ={1.1,2.2,3.3,4.4,5.5};

double d[5] ={1.1,2.2,3.34.4,5.5};

printf("*b = %d, *(b+1) = %d, *(b+2) = %d\n", *b, *(b+1)*(b+2));

return 0;

}

 

 

 

#incLude <stdio.h>

#include <string.h>

int main( )

{

char *str = "I love FishC.com!";

int i;

length = strlen(str) ;

for (i = 0; i < length; 1++)

{

printf("%C", str[i]);

}

printf("\n");

return 0;

}

 

数组在内存中只是数组元素的简单排列,没有开始和结束标志,在求数组的长度时不能使用sizeof(p) / sizeof(int),因为 p 只是一个指向 int 类型的指针,编译器并不知道它指向的到底是一个整数还是一系列整数(数组),所以sizeof(p) 求得的是 p 这个指针变量本身所占用的字节数,而不是整个数组占用的字节数。

相关文章
|
1月前
|
搜索推荐 C语言
指针与数组
指针与数组
50 9
|
1月前
|
算法 Java
双指针在数组遍历中的应用
文章深入探讨了双指针技术在数组遍历中的应用,通过实战例子详细解释了快慢指针和首尾指针的不同用法,并提供了解决LeetCode相关问题的Java代码实现。
|
1月前
|
存储 程序员 C语言
指针的高级应用:指针数组、数组指针、函数指针等。
指针的高级应用:指针数组、数组指针、函数指针等。
73 0
|
2月前
|
运维
开发与运维数组问题之指针的加减法意义如何解决
开发与运维数组问题之指针的加减法意义如何解决
37 7
|
2月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
21 6
|
2月前
|
存储 C++ 运维
开发与运维数组问题之指针的定义语法如何解决
开发与运维数组问题之指针的定义语法如何解决
27 6
|
3月前
|
编译器 C语言
指针进阶(数组指针 )(C语言)
指针进阶(数组指针 )(C语言)
|
3月前
|
C语言
【C语言】:详解函数指针变量,函数指针数组及转移表
【C语言】:详解函数指针变量,函数指针数组及转移表
48 2
|
3月前
|
C语言
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
【C语言】:详解指针数组,数组指针及(二维)数组传参(2)
31 1
|
3月前
|
Serverless C语言
【C语言】:对(一维)数组与指针的深入理解(1)
【C语言】:对(一维)数组与指针的深入理解(1)
30 1