本文将深入探讨C语言中的指针概念,它是C语言中极其重要的特性之一。指针允许我们直接操作内存地址,实现高效的数据处理和灵活的程序设计。 1. 指针基本概念 - 指针是C语言中的一种特殊变量,它存储的是另一个变量的内存地址。换句话说,变量的地址被称为该变量的“指针”。 - “指针变量”是一种专门用于存储地址的变量,即它存储的是其他变量的指针。 2. 指针类型与声明 - 在C语言中,我们可以通过在类型名前加星号(*)来声明指针变量,例如`int *p`声明了一个指向整型变量的指针。 - 多个指针可以一起声明,例如`int *p1, *p2`声明了两个指向整型变量的指针。 3. 指针操作与解引用 - 通过解引用运算符(*),我们可以访问指针所指向的变量。例如,`*p1`表示获取`p1`所指向的变量的值。 - 赋值时,可以将一个指针赋值给另一个指针,但需要注意类型匹配。例如,`int *p1 = &a, *p2 = &b`,这里`p1`和`p2`分别存储了变量`a`和`b`的地址。 4. 非法指针操作 - 指针未初始化直接使用是非法的,可能导致不可预知的行为。例如,`int *p1 = 100`是错误的,因为100不是一个有效的内存地址。 - 将指针赋值给非地址值也是不合法的,如`int *p1 = &a, *p2 = 100`。在C语言中,100会被自动转换成指针类型,但这并不意味着它指向了一个有效内存位置。 5. 字符串与指针 - 字符串在C语言中本质上是一系列字符的数组,字符串的末尾由空字符'\0'标记。 - 示例代码展示了如何使用指针复制字符串。在示例1中,`for`循环将`a`字符串的字符复制到`b`字符串的特定位置。在示例2中,`link`函数用于将一个字符串的内容复制到另一个字符串,通过两个指针`from`和`to`的同步移动实现。 6. 数组与指针的关系 - 数组名在C语言中实际上是一个指向数组首元素的指针。因此,声明`char str[10]; str[] = "hello";`等价于`char str[10] = "hello";`。 7. 字符串常量与指针 - 字符串常量如`"house"`存储在只读内存区域,因此直接修改如`b[2]='r'`是不允许的,而`a[2]='r'`则可以,因为`a`是字符数组,可以修改其内容。 8. 指针的动态内存分配 - 动态内存分配函数如`malloc()`和`calloc()`可以创建指针变量指向的内存空间。例如,`char *p = malloc(sizeof(char) * 10);`为`p`分配了10个字符的空间。 指针是C语言中的核心概念,它提供了对内存的直接访问,使得程序能够实现更高级别的抽象和优化。理解并熟练掌握指针的使用对于编写高效的C语言程序至关重要。
2.一个专门用来存放另一变量的地址(即指针)称为“指针变量”;
3.指针变量就是地址变量(存放地址的变量),指针变量的值(即指针变量中存放的值)是地址(即指针);
4.指针是一个地址,而指针变量是存放地址的变量;
5.如:int *p1 ,*p2,*表示该变量的类型为指针类型,指针变量名是p1,p2而不是*p1,*p2,正确的定义方式如下:
int a,int b,*p1,*p2;p1=&a,p2=&b(注意不能写成*p1=&a,*p2=b)或定义指针变量时同时初始化int a,b;int *p1=&a,*p2=b;
6.不能将一个整数赋给一个指针变量,如:int *p1=100,是错误的,但是int *p1=&a,*p1=100是正确的,是将100赋给了p1所指的变量a;
7.#include<stdio.h>
void main()
{
char a[]="hello!";
char b[20]="bom ";
int i;
for(i=0;a[i]!='\0';i++)
b[i+4]=a[i];// b[i+4]=a[i]字符串连接,b[i]=a[i];字符串复制
b[i+4]='\0';// b[i]='\0';
printf("%s\n",a);
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
printf("\n");
}
#include<stdio.h> //字符串连接
void main()
{
void link(char *from,char *to);
char a[40]="I am a teacher .";
char b[]="You are a student.";
char *p1=a;
char *p2;
p2=b;
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 3
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展