# include <stdio.h> int main(void) { int * p; //等价于 int *p 也等价于 int* p; int i = 5; char ch = 'A'; //p = 5; //error //p = &ch; //error //p = ch; //error p = &i; // *p 表示是以p的内容为地址的变量 *p = 99; printf("i = %d, *p = %d\n", i, *p); return 0; }
一维数组名含义示例:
# include <stdio.h> int main(void) { int a[5]; //5是数组名 5是数组元素的个数 元素就是变量 a[0] -- a[4] //int a[3][4]; //3行4列 a[0][0]是第一个元素 a[i][j]是第i+1行j+1列 //a[0] 与 a[4] 他们的数据类型都是一样的, a[0] 和 [a1] 是连续的 int b[5]; //a = b; //error a是指针常量 // int %d // long int %ld //char %c //float %f //double %lf //#X 以16进制输出 printf("%#X\n", &a[0]); printf("%#X\n", a); return 0; }
输出数组内容的函数:
# include <stdio.h> // f函数可以输出任何一个一维数组的内容 void f(int * pArr, int len) { int i; for (i=0; i<len; i++) printf("%d ", *(pArr+i)); //*pArr *(pArr+1) *(pArr+2) printf("\n"); } int main(void) { int a[5] = {1, 2, 3, 4, 5}; int b[6] = {-1, -2, -3, 4, 5, -6}; int c[100] = {1, 99, 22, 33}; f(a, 5); //a是 int *类型 f(b, 6); f(c, 100); return 0; }
第二个一维数组示例:
# include <stdio.h> void f(int * pArr, int len) { pArr[3] = 88; // 等价于 *(pArr+3) = 88 指针地址为什么+3就表示是第四个,因为数组是连接的,所以地址+3就表示第四个,pArr表示数组的第一个值 } int main(void) { int a[6] = {1, 2, 3, 4, 5, 6}; printf("%d\n", a[3]); f(a, 6); printf("%d\n", a[3]); return 0; }
小例子:
# include <stdio.h> void f(int * pArr, int len) { int i; for (i=0; i<len; i++) printf("%d ", pArr[i]); // *(pArr+i) 等价于pArr[i] 也等价于b[i] 也等价于 *(b+i) pArr[i] = printf("\n"); } int main(void) { int a[5] = {1, 2, 3, 4, 5, 6}; int b[6] = {-1, -2, -3, -4, 5, -6}; int c[100] = {1, 99, 22, 33}; f(b, 6); return 0; }
相关推荐
在C语言中,二维数组是处理表格数据的一种基础方式,它本质上是一组一维数组的集合,每个一维数组代表数组的一行。本编程练习旨在加深对C语言中二维数组、指针和函数的理解,通过实际操作提升编程技能。下面我们将...
需要注意的是,在第三种方法中,我们不能使用array[i][j]这种形式来取值,而是需要将二维数组看成一个一维数组,使用array[i * j + j]这种形式来进行取值。这是因为在传参的时候,我们将array[][]数组当成二级指针来...
因此,当我们传递一个二维数组的名称给函数时,实际上是传递了一个指向该数组第一行首元素的一维指针。下面是一个简单的示例: ```cpp // 定义函数,通过指针接收二维数组 void sum2DArray(int (*arr)[3][3], int ...
下面是一个简单的示例,展示了如何初始化并操作一个二维数组: ```c #include int main() { // 定义一个3x2的整数数组 int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}}; // 遍历数组并计算每行的总和 for (int i =...
例如,在二维数组中,如果定义了一个指向一维数组的指针,则可以认为这是一个数组指针,它可以指向二维数组中的每一行。 - 使用示例:`int (*ptr)[N];` 其中 `N` 表示数组的大小,`ptr` 是指向长度为 `N` 的整型...
1. **数组名作为指针:** 在C语言中,一维数组的名字可以被视为指向数组第一个元素的指针。例如,对于一个整型数组 `int arr[10];`,`arr` 可以被视为指向 `arr[0]` 的指针。 2. **指针与数组索引的等价性:** ...
在C语言中,指针和数组是两种非常重要的数据结构,它们可以...以上内容详细阐述了C语言中数组指针和指针数组的概念,以及如何通过指针操作数组,包括一维数组和多维数组。理解这些概念对于编写高效的C程序至关重要。
在C语言中,顺时针打印二维数组是一个常见的编程问题,它涉及到对数组的理解、指针的操作以及循环结构的应用。本问题旨在通过编程实现从数组的左上角开始,沿着顺时针方向逐个访问并打印数组元素。下面将详细阐述...
例如,下面是一个字符指针数组的定义: ```c char *pa[10]; /* pa 是数组,其元素是字符指针。 */ ``` 这种数组的每个元素都是一个指针,指向一个字符或字符串。 二、指针数组的使用 指针数组可以用于处理二维数组...
在C语言编程中,循环、嵌套、数组、指针、函数和结构体是核心概念,它们构成了C语言的强大功能和灵活性。以下是对这些概念的详细解释和实践应用。 一、循环 C语言中的循环主要有三种类型:for循环、while循环和do-...
标题“C语言动态分配二维数组”直接指出了本文的主要内容是关于在C语言环境下如何使用动态内存分配函数(如`malloc`)来创建一个可以变化大小的二维数组。 #### 描述解析: 描述部分强调了将详细讨论如何在C语言中...
在C语言中,数组名实际上是一个常量指针,它指向数组的第一个元素。因此,当你传递数组名给函数时,实际上是传递了数组的首地址。例如,`void printArray(int arr[], int size)`,这里的`arr`实际代表`&arr[0]`。 ...
在C语言中,当我们声明一个函数并希望接受数组作为参数时,实际上传递的是数组的首元素地址,因为数组名在大多数情况下等价于指向其首元素的指针。有三种常见的方式声明这种函数: 1. 形式参数为指针:`void ...
本文通过对C语言中数组访问机制及强制类型转换的深入分析,提供了一个实际的编程示例来解释如何将一维数组的指针转换为二维数组的指针,并成功传递给期望接收二维数组的函数。此外,还探讨了如何处理未知大小的二维...
在C语言中,数组名实际上是一个指向首元素的指针。因此,`arr`在某种程度上相当于`&arr[0][0]`,即指向数组第一行第一列的地址。这意味着可以传递数组名作为函数参数,函数内部可以通过指针操作数组。 五、三维形体...
- 在C语言中,数组名实际上是一个指向数组首元素的指针,因此可以使用指针来访问数组元素。 - 示例:`int *p = a; p[0] = 1;` 使用指针法访问数组元素。 以上就是基于题目描述中的知识点总结,这些内容不仅覆盖了...
这里定义了一个名为`a`的指针数组,它包含10个整型指针。需要注意的是,指针数组本身是在栈上分配的,而每个指针指向的内存则需要另外分配。可以通过循环为每个指针分配内存,例如: ```c for (int i = 0; i ; i++)...
通过上述实验和理论题,学习者可以深入理解C语言中数组的基本概念,掌握如何声明、初始化、访问数组,以及如何利用指针高效地操作数组,特别是对于一维和二维数组的应用。这些知识是编写复杂C程序的基础,对于后续...
例如,声明一个指针变量`p`,类型定义为`int (*p)[4]`,表示`p`是一个指针,它指向一个包含4个元素的一维数组。当`p`指向`a[0]`时,其值与`a`,`a[0]`或`&a[0][0]`相同。通过`p+i`,我们可以使`p`指向一维数组`a[i]`...