想了解C语言中数组和指针的关系?这篇文章将占用你三分钟的时间。看完一定会有收获!
排列
将数组声明为数据类型名称[常量大小],并将数据类型的一个或多个实例分组到一个可寻址的位置。
常量大小可以是一个表达式,但该表达式必须计算为常量,例如:
#定义最大尺寸16
…
int list[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[];
字符串替换
在C语言中,类型数组char用于表示一个字符串,字符串的结尾由一个设置为0的字节来标记(也称为NUL字符)
以下定义都将其数组设置为相同的值:
int str 1[]= { ‘一’,’b & # 8217,’c & # 8217,’0′};
int str 2[]= " ABC ";
Ansi也允许像int str[3]= “abc ”,也就是同一个int str[3]= { ‘一’, ‘b & # 8217, ‘c & # 8217};(省略了最后一个NUL字符)
多维数组
多维数组只是数组的数组(数组的数组…)
相似的多维数组m[3][2]存储在连续的存储位置,如m [0] [0],m [0] [1],m [1] [1],m [2] [0],m [2] [1]
针
指针是一个包含变量地址的变量。
有两个运算符与指针相关联:
运算符返回其参数的地址。
这个*通过指针引用它的参数来访问对象指针。
指针的一个简单例子是:
int i,j;
int * p;/*指向’int & # 8217指向*/的指针
I = 6;
p = & I;/*将` p & # 8217设置为“I & # 8217*/的地址
j = * p;/*威尔’j & # 8217设置为6(’我’的值)*/
* p = 5;/*威尔’我’设置为5 */
指针可以包含一个地址或称为指针的特殊值,它不同于所有有效的指针
指针上下文中的0将在编译时转换为空指针。
还有一个预处理宏NULL(在
像expression这样的表达式会导致语句是否为空指针,因为它与相同,而且由于它在指针的上下文中被转换为空指针,所以如果(!ptr)声明ptrif (ptr)if (ptr == 0)0ptr
同样,如果该语句是而不是a 空指针if (ptr) statementptr,则该语句将被求值。
指针不能指向:
常数(像3,not const类似于s const int a;)因为值3没有永久的存储器地址
变量,因为寄存器不在内存中,所以它没有内存地址。
类似的表达式(8 * k),由于没有永久内存地址,与常量大致相同。
指针和数组。
指针可以被认为是数组。
此代码:
int ***in(void){
int a [3] = {6,3,7 };
int * p = & a[0];/*将` p & # 8217指向` a & # 8217*/的第一个元素
if(a[0]= = p[0]&& ampa[1]= = p[1]&& ampa [2] == p [2])
返回1;
其他
返回0;
}
因为所有有效值p[n]a[n]都指向n
指针不是,但它也是一个数组。
这是C语言中最容易混淆的部分之一,所以这里有三种不同的方式来说明数组A和指向P A的第一个元素的指针之间的区别:
描述:使用直接寻址来访问数组,使用间接寻址来访问指针。
不太技术性的解释:A是地址,P是保存下面地址的地址A
极其啰嗦的解释:从计算机启动时的地址中检索值,移过去,从那里获取值;为了从中检索值,计算机将从地址开始,获取存储在其中的地址并向其添加N,然后从结果地址中获取值a[n]ap[n]p。
然而,在大多数情况下,指针和数组访问可以被视为具有相同的功能。主要的例外是:
1)sizeof运算符
Sizeof(array)返回所有元素数组中使用的内存量。
Sizeof(pointer)只返回指针变量本身使用的内存量。
2) &运算符
& amp是,数组别名& Array[0]并返回
& amp指针指针指针返回的地址
3)字符数组的字符串文字初始化
char array[]= “abc & # 8221将前四个元素设置为array & # 8217一’,’b & # 8217,’c & # 8217还有’0′
char * pointer = & # 8220abc & # 8221将指针设置为“abc”字符串的地址(它可能存储在ROM中,因此不能更改)
此外,数组不能调整大小或重新分配。
本文来自倾心之夏投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/623484.html