首页 > 编程知识 正文

c语言指针数组和数组指针(谈谈个人修养三分钟)

时间:2023-05-06 19:59:39 阅读:1318 作者:3965

想了解C语言中数组和指针的关系吗?这篇文章会占用你三分钟的时间,看完一定会有收获!

00-1010数组被声明为数据类型名称[常量大小],数据类型的一个或多个实例被分组到一个可寻址的位置。

常量大小可以是一个表达式,但表达式的计算结果必须是常量,例如:

#定义最大尺寸16

.

Int列表[MAX _ SIZE 1];

c数组从元素0开始,所以像数组定义int a[3];将创建三个int软件,它们是可寻址的,例如a[0]、a[1]和a[2]

请注意,即使a[3]的定义很难说,也没有名字a[3]

像其他变量一样,全局和静态数组元素默认初始化为0,自动数组元素用垃圾值填充。

可以用大括号中的一个或多个值初始化数组,例如:

int a[3]={5,-2,17 };

ANSI C之前的编译器可能不允许在自动数组上初始化。

如果有初始化值列表,但未指定常量大小,则数组的大小与初始化值的数量相同。

int q[]={1,2,3 };是一样的。

int q[3]={1,2,3 };

若要声明对另一个文件中定义的数组的外部引用,请使用extern int a[];

00-1010在C语言中,类型数组char用来表示一个字符串,字符串的末尾用一个设置为0的字节(也称为NUL字符)来标记。

以下定义都将其数组设置为相同的值:

int str1 []={'a ',' b ',' c ',' 0 ' };

int str 2[]=" ABC ";

ANSI C也允许像int str[3]='abc '这样的定义;它是同一个int str[3]={'a ',' b ',' c ' };(省略了最后一个NUL字符)

数组

多维数组只是数组的数组(数组的数组.)

相似的多维数组m[3][2]存储在连续的存储位置,如m [0] [0]、m [0] [1]、m [1] [0]、m [2] [0]、m [2] [1]

字符串常量

指针是一个包含变量地址的变量。

有两个运算符与指针相关联:

该运算符返回其参数的地址。

*引用

用它的参数通过指针访问对象指针

指针的一个简单示例是:

int i,j;

int * p; / *指向'int'的指针* /

我= 6;

p =&i; / *将`p'设置为`i'的地址* /

j = * p; / *将'j'设置为6('i'的值)* /

* p = 5; / *将'i'设置为5 * /

指针可以包含一个地址或一个称为空指针的特殊值,该值不同于所有有效指针

指针上下文中的0将在编译时转换为空指针

还有一个预处理器宏NULL(在<stdio.h>或中 定义 <stdlib.h>)

像expression这样的表达式将导致 语句是否为空指针,因为它与相同, 并且由于在指针上下文中将其转换为空指针,因此代码将与空指针 进行隐式比较if (!ptr) statementptrif (ptr)if (ptr == 0)0ptr

同样,将评估声明,如果是不是一个空指针 if (ptr) statementptr

指针不能指向:

常数(像3,不const类似s const int a;)由于值3不具有永久的存储器地址

register 变量,因为寄存器不在内存中,因此没有内存地址

类似的表达式(8 * k),它们与常量大致相同,因为它们没有永久的内存地址

指针和数组

指针可以视为数组

这段代码:

int main(void){

int a [3] = {6,3,7};

int * p =&a [0]; / *将`p'指向`a'的第一个元素* /

if(a [0] == p [0] && a [1] == p [1] && a [2] == p [2])

return 1;

else

return 0;

}

将返回1,因为指向 n的所有有效值p[n]a[n]

指针是没有,不过,同为数组

这是C语言最sxdpkq部分之一,因此这里有三种不同的方式来说明数组a 与指向p第一个元素的指针之间的区别a :

技术说明:使用直接寻址访问数组,使用间接寻址访问指针

较少技术的解释:a是一个地址, p是一个保存以下地址的地址a

极其罗嗦解释:检索值从 ,在计算机启动时的地址,移动ñ过去,并获取价值从那里; 要从中检索值,计算机将从地址开始,获取存储在其中的地址并向其添加n,然后从结果地址中 获取值a[n]ap[n]p

但是,在大多数情况下,指针和数组访问可被视为具有相同的作用,主要的例外是:

1)sizeof 运算符

sizeof(array) 返回所有元素中使用的内存量 array

sizeof(pointer)仅返回pointer变量本身使用的内存量

2)&运算符

&array是的别名,&array[0]并返回中第一个元素的地址array

&pointer 返回的地址 pointer

3)字符数组的字符串文字初始化

char array[] = "abc"将前四个元素设置 array为'a','b','c'和' 0'

char *pointer = "abc"设置pointer为“ abc”字符串的地址(可能存储在只读存储器中,因此不可更改)

此外,无法调整数组大小或重新分配数组。

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

编程学习书籍分享:

编程学习视频分享:

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

C语言C++编程学习交流圈子,点击下方【了解更多】获取更多学习资料帮助你学习成长~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。