1. 使用指针指向数组

int 

这种输入方式是错误的,因为数组名代表数组首元素的地址,是一个指针型常量,其值在程序运行期间是固定不变的。所以a++是无法实现的。

int a[10];
int *p = a;for(i = 0;i<10;i++){scanf("%d", p++);
}for(i = 0;i<10;i++){printf("%d",*p++);
}

上面这个代码块的输入部分是正确的,但是输入部分错了。因为在进行输出的时候,没有让p重新指向数组首地址。这样的话,在第二个for循环开始时,p的值为a+10。

因此应该在第二个for循环处添加代码

p = a;

另外由于++和*同优先级,因此

*p++;
*(p++);

这两个语句等价

2. 使用指针指向字符串

指针可以指向字符串的首地址

char 

其中p指针指向的是字符串“I live in China."的首个元素'I',其为字符变量,不是字符串变量。在第二行中,%s代表输出字符串,首先输出p所指向的首个元素'I',然后对p进行“+1”操作,让p指向字符串的第二个元素' ',如此循环下去,指导p指向的元素为字符串终止符'0'。需要注意的是,p不代表整个字符串,只是代表字符串的首地址。在输出字符串的时候,使用‘%s’表示输出整个字符串

同样的对于字符串数组

char str[]="I live in WuHan.";
printf("%sn",str);

其中数组名同样是一个指针,指向第字符串的第一个元素。

注意:c语言中是没有字符串变量的,但是我们在输出字符串时,可以通过'%s'和字符串的首地址来输出字符串。

3. 字符串数组的终止符'0'

int 

上面这个函数,乍一看好像没什么问题。但是需要注意的是,在for循环中,没有把a数组中的字符串终止符'0'赋值给b数组,这就导致了输出b数组时除了"I am a programmer."外,还会输出一些不知道什么字符,只有当b数组中出现'0'时(随机),才会终止输出

4. 指针的运算

int *p, *p1;
int array[10], num;
int max();p = array;      //将数组array的首地址赋值给指针变量p
p = &array;     //将数组array的地址赋值给指针变量p
p = &array[0];  //将数组array的首地址赋值给指针变量p
p = &array[1];  //将数组array的第二个元素的地址赋值给指针变量p
p = p1;         //将指针变量p1的值赋值给指针变量p
p = &num;       //将num的地址赋值给指针变量p
p = max;        //将函数max的入口地址赋值给指针变量p
p++;            //将指针变量p加1,其值加上定义的*p的类型所占的字节数,这里*p的类型为int,则在p的值(所指向变量的地址)的基础上加4

需要注意的是,p = array与p = &array是不同的,虽然arry与&array的值相同,但是他们所代表的意义不同,一个是数组的首地址,一个是数组的地址。

int array[10];
printf("%d %d %d %d",array, &array, array+1,(&array+1));

运行结果分别是:

可见&array+1是在array[9]的地址的基础上加4(即int所占的4个字节)。

5. 指针和指针变量

int 

注意,指针变量是指变量p,而指针是指变量p所存储的地址本身。

循环char 指针_c 学习笔记 指针相关推荐

  1. C语言学习笔记——指针章节

    学习小结 c语言指针学习笔记汇总 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//指针 //在计算机科学中,指针是编程语言的一个对 ...

  2. 智能指针_auto_ptr2_学习笔记

    //1,release函数只是简单的转移对内存的拥有权,自己变成null,不会delete,一般在将所有权转移给别的智能指针的时候使用.具体可参加源码. 例:#include <memory&g ...

  3. C和指针之学习笔记(3)

    第8章 数组 1.数组与指针 数组名是一个指针常量,也就是数组第1个元素的地址. int  a[10];  int  b[10];  int  *c; (1) c = & a[0]; & ...

  4. c++ map中用char数组_C开发实战-指针和字符串

    指针操作字符数组 首先定义一个字符数组char_array,该数组占据11个字节,因为初始化值是字符串常量,而字符串常量以0结尾 char char_array[] = "helloworl ...

  5. C语言学习笔记---指针

    C语言要玩的好,指针是核心,但是指针在学习的时候看教程往往感觉一看就明白,但是实际用的时候一用就错,而且还不知道错在哪.为了更加深刻的了解指针,将学习过程记录下来,依次加深对指针的理解. 先看看一段测 ...

  6. 学习笔记——指针那些事儿

    指针概况 关于指针这一块儿,学起来容易迷,当然也是C语言的重点.下面详细说说指针的类. 指针是特殊的变量,相当于地址,指针里面存储的数据数值实际上就是内存地址.需要考虑四个方面:指针的类型,指针所指的 ...

  7. 《C指针》学习笔记( 第四、五章)指针与字符串、指针与多维数组

    第四章:指针与字符串 字符串就是字符序列.它存储的是字节数组.一个特殊字符串结束符是用来标记字符串的结束.结束符用转义序列'\0'表示. 定义字符串变量的方法 char *strptr = " ...

  8. C/C++学习笔记-指针数组、数组指针

    指针数组.数组指针 这两者前两个字可以看成是形容词,后两个词可以看成是名词: 名称 举例 是什么 特点 指针数组 int *p[10] 数组 由指针构成,例子中指针指向整型 数组指针 int(*p)[ ...

  9. c语言普通变量间接访问,C语言学习笔记-指针

    野指针问题 野指针是没有指向地址的指针,也就是该指针指向的地址是随机的. 因为指针的指向地址是随机的,所以很有可能指向不可访问的弟子,导致程序崩溃,或者访问了不该访问的地址,导致影响其他功能使用 为了 ...

最新文章

  1. 网络配置——Linux入门到精通的难关之一
  2. apply通过实例理解
  3. C# 托管资源与非托管资源
  4. HyperLedger Fabric 节点(Orderer、Peer、Commiter)与channel关系
  5. vueh5调用摄像头拍照_Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能...
  6. EasyRecovery易恢复15免费数据恢复软件功能介绍
  7. 传统优化算法VS智能优化算法
  8. 关于23届大数据岗实习总结
  9. HPUACM暑期集训第二次积分训练赛 C——Simplest
  10. Java *2.22(财务应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值。例如:1156就表示11美元56美分。
  11. python使用requests爬取淘宝搜索页数据
  12. 个人数字作品合作协议
  13. ADC 信号调理电路设计——必要措施、实测验证和应用说明
  14. 调整html button位置
  15. 深入剖析BLE蓝牙数据收发处理
  16. 火灾自动报警系统施工及验收规范
  17. VUE实现学生用户信息表
  18. 腾讯云轻量应用服务器DD Windows教程
  19. Levenberg-Marquardt算法浅谈
  20. ROS(indigo)使用Qt Creator Plug in即ros_qtc_plugin

热门文章

  1. Spark DF:关于Row中的数值获取问题
  2. 一个简单的flask程序
  3. Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
  4. JSON数据写入和解析
  5. TreeView 用法(有代码)
  6. Camera HW组成(二十六)
  7. C++之安装boost库
  8. Windows上Chrome被“毒霸网页“劫持启动页解决方式
  9. 解决Tensorflow使用CPU报错
  10. 对Android蓝牙UUID的理解