C语言指针讲解:指针数组的正确使用

需积分: 0 2 下载量 124 浏览量 更新于2024-07-14 收藏 943KB PPT 举报
"这篇资源是关于C语言课件,重点讲解了指针数组的使用,特别是强调了指针数组在使用前需要先赋值的重要性,避免出现悬挂指针的问题。" 在C语言中,指针是一种强大的工具,它允许我们直接操作内存地址,从而高效地处理数据。指针数组是一种特殊的数组,它的每个元素都是一个指针,可以指向不同类型的变量。然而,如同在标题和描述中指出的,使用指针数组时必须遵循一个关键规则:先赋值,后使用。 首先,我们需要理解指针的基本概念。在C语言中,变量实际上是在内存中占据一段连续的空间,这个空间的起始地址就是变量的地址。通过取地址运算符`&`,我们可以获取到变量的地址,这个地址可以被赋值给一个指针变量。例如,`int x; int *ptr = &x;` 在这里,`ptr` 是一个整型指针变量,它存储了变量 `x` 的地址。 指针变量本身也是一个变量,它也需要存储空间,并且可以像普通变量一样被初始化。初始化时,我们需要确保提供的是有效内存地址,例如 `int y = 20; int *p = &y;` 这里 `p` 指向了 `y` 的地址。 在使用指针数组时,如果不先赋值就直接使用,可能会导致悬挂指针问题,就像示例代码中所示的那样。在代码段 `char *s[N]; for(i=0;i<N;i++) gets(s[i]);` 中,数组 `s` 的每个元素都是一个未初始化的指针,如果直接调用 `gets(s[i])` 来读取用户输入,这些指针就会变成悬挂指针,因为它们没有指向任何已分配的内存。这可能导致不可预测的程序行为,甚至引起运行时错误。 正确使用指针数组的方式是在使用之前为其元素赋值,通常是分配内存并赋予对应的地址。例如,可以使用 `malloc` 或 `calloc` 动态分配内存,然后将这些内存块的地址赋值给指针数组的元素。例如: ```c char **strs; strs = malloc(N * sizeof(char*)); for (i = 0; i < N; i++) { strs[i] = malloc(MAX_LENGTH); // 假设 MAX_LENGTH 是最大字符串长度 fgets(strs[i], MAX_LENGTH, stdin); // 读取用户输入 } ``` 在这个例子中,`strs` 是一个指针数组,每个元素都是一个指向字符数组的指针。我们先为 `strs` 分配内存,然后为每个元素分配内存并读取用户输入。 理解和正确使用指针数组是C语言编程中的重要一环。在实际编程中,一定要避免使用未初始化的指针,确保所有指针都指向有效的内存区域,这样才能编写出安全、可靠的代码。