C语言字符数组、指针总结 一、 字符串与字符数组 c语言没有字符串类型,用字符数组存放字符串。 字符指针有以下几种: 第一种: C语言中数组名代表的是数组首素的地址,除了一下两种情况: 在函数sizeof(数组名)中,计算的是整个数组的大小。 这里输出10,sizeof(a)表示整个数组所占的字节。 &数组名,这里取出的是整个数组的地址。 这里输出也是10,sizeof(&a数)表示整个数组所占的字节。 第二种: 第三种: 二、常量字符串 常量字符串的内容是不能被修改的。内存中只存在一份,多个字符指针指向相同的字符串,这些指针中存放的地址相同。将其赋值给字符指针时,是把其首字符的地址赋值给字符指针。 三、指针数组 指针数组时存放指针的数组,数组素时地址。 应用: 四、数组指针 数组指针是一个指针,指向的是一个数组。 数组指针 – 指向数组的指针 — 可以存放数组的地址 int arr[10] = {0}; // 定义并初始化一个含有10个素的整型数组,数组名arr:是首素地址(等同于&arr[0] <—> arr)。 &arr: 是数组的地址(也是数组首素的地址),但是&arr 和 arr 和&arr[0]的地址相同,只是&arr + 1是跨过整个数组长度,另外两个地址+1是跨过数组中一个素。 现在我们把&arr存起来,放到一个指针变量中,该指针变量就是数组指针。 即为:int(*p)[10] = &arr; 指针数组与数组指针的区分: 指向char指针类型的数组的指针: 数组的地址和数组名的比较: 数组指针主要用在二维及以上维度的数组 int arr[2][3] = {{1,2,3}, {4,5,6}}; 对于二维数组arr,数组名(arr)也是首素的地址,把二维数组看成一维数组,即每一行看做一个素,即第一行是二维数组的第一个素(首素); 简而言之,对于二维数组,数组名是首素的地址;首素是第一行;第一行是一个二维数组。 使用:当把二维数组名作为实参进行传递时,且形参写成指针的形式,则需要一个指针来接收,因为数组名是首素(第一行、一维数组)的地址,而数组的地址应该放到数组指针中。只不过这个数组指针指向的不是二维数组,而是指向第一行(一维数组的,其有3个素,每个素为int),故形参应该写成:int (*p)[3]; 因为p指向的是一个数组,所以p+1是跳过一个数组的长度,即指向了第二行。 数组指针作为函数参数: 指针和数组的区分: int arr1[5]; // arr1是一个包含5个素的整型数组 int* arr2[5]; // arr2是一个包含5个素的int*数组,即指针数组 int *(*p)[5]; // p是一个指向包含5个int类型数组的指针, 即数组指针 int (*p1[10])[5]; // p1是一个数组,该数组有10个素,每个素的类型为:数组指针,该数组指针指向的素有5个素,每个素是int类型。把数组名和方块去掉,剩下的就是素的类型。 数组和指针作为函数参数 一维数组作为函数参数,可以用数组和指针两种形式来接受参数。 二维数组作为函数参数 可以用数组和指针两种形式来接受参数 一级指针作为函数参数 当参数为一级指针时,如果指向的是一个数组,可以用指针来接受,也可以用数组形式来接受 二级指针作为函数参数 形参要写成二级指针的形式,如void fun1(int p) {;} 实参要用指针变量的地址来进行传递,也可以用指针数组的数组名来进行传递。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/51451.html