还是看源码发现的问题

static int import_lowe_features( char*filename, struct feature** features )

这个函数的作用是将txt文件中的Lowe的特征点导入到feature结构体中。在这个函数中第二个参数是指向结构体的指针的指针。

f = calloc( n, sizeof(struct feature) );//在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针。再加一个for循环就实现了将txt文件中的n个特征点导入。最后*features = f;又将首地址赋给features,注意到这里的features是复数,指一幅图像中所有特征点的集合,但不明白为什么要再加一层指针。对指针的理解不够,这里应该就是导入特征点进行匹配时出错的原因。

https://blog.csdn.net/qq_14936041/article/details/53139047

#include <stdio.h>

#include<stdlib.h>

int main(void)

{

inta;

//printf("%p",a);

a= 10;

printf("%d\n%p\n",a, a);

int*p;

p= &a;

printf("%d\n%d\n%p\n",p,*p, p);

getchar();

return1;

}

注释掉的//printf("%p", a);是为了输出初始化前变量a的地址,但c++中已经不允许这么做,会报错errorC4700: 使用了未初始化的局部变量“a”。初始化的过程才会给变量自动分配地址。

这是输出结果。这里用了变量名和指针的方式访问a,可以看到,输出的a的值都是一样的,但是a的地址和p的值及p的地址是不同的。指针变量也是一个变量,初始化的过程会赋值一个新的地址,这个地址当然和a的地址不一样,但是p的值不就应该是a的地址吗,为什么和之前输出的不一样呢?

简单修改一下代码,因为其实一直没有关注&a这个值。

int a;

//printf("%p",a);

a = 10;

printf("a的值:%d\n",a);

printf("a的地址:%p\n",a);

printf("a的地址&a=%d\n",&a);

printf("-------------\t\t\t\t\t\t\n");

int*p;

p = &a;

printf("取p中的内容*p=%d\n",*p);

printf("取p中的值p=%d\n",p);

printf("取p中的地址:%p\n",p);

printf("取p中地址&p=%d\n",&p);

//printf("%d\n%d\n%p\n%d\n",p,*p, p,&p);

getchar();

发现&a的值,即a的地址值确实等于p的值,但是为什么用%p打印出的a的地址和&a的值不一样呢?而且用%p打印出的p的地址也发生了变换。地址的变化可以理解,是因为动态分配内存。

原来是打印地址时,虽然使用了%p指针格式控制符,但是要想输出地址,还是要输出的是%a,而不能是a。指针格式%p意味着输出的是十六进制的数而已,这个数是指针指向数据的地址,所以%p格式输出的指针p就是%d格式输出的&a。其实a不是指针,按道理应该是不能输出%p格式的。

这是网易笔试的一道题,问他的输出是多少。考察的就是对指向数组的指针的认识:

int main()
{int arr[] = {1,2,3,4,5,6,7};int *p = arr;*(p++) += 89;printf("%d,%d\n", *p,*(++p));return 0;
}

*p是指向数组首地址的指针。这里要说的是数组名是数组首元素的首地址,同时也是一个指针常量,存放数组首地址。二者数值上相同,操作不同。数组名作指针常量处理时不能作左值,不能自加自减。在作函数形参的时候沦为普通指针。

这里把arr赋值给*p,通过指针访问数组元素,其实数组下标的访问方式就是通过指针实现的。所以关键就在于p的取值,即地址是第几个元素的地址。

*(p++)+=89

*(p++)=*(p++)+89//两个++都是在p之后,所以在这一行中p的值没有影响,所以p还是指向第一个元素,只不过第一个元素被修改为90

按道理继续格式化输出的p已经加了一次,应该指向第二个,第三个元素。但是程序输出不是这样

#include<stdio.h>
#include<string>
int main()
{int arr[] = { 1, 2, 3, 4, 5, 6, 7 };int *p = arr;*(p++) += 89;printf("\*p的值%d\n", *p);printf("\*p的值%d,\*(p++)的值%d\n", *p, *(++p));getchar();return 0;
}

若是直接在修改第一个元素之后输出*p,是第二个元素的值,如果连同*(p++)一起输出,先计算p++,再输出,这时候p指向了第三个元素。

指针%p输出的一些认识相关推荐

  1. C语言学习之有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值

    有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. int main(){int a[3][4];int i,j,*p;//p是 int *型指针变量printf("请 ...

  2. C语言学习之通过指针变量输出整型数组a的10个元素

    通过指针变量输出整型数组a的10个元素 int main(){int a[10],i,*p=a;//p的初值是a,p指向a[0] for(i=0;i<10;i++){scanf("%d ...

  3. 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...

    例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...

  4. C语言指针实数组输入输出,C语言:回来两个数组中第一个元素的指针,并输出这个值...

    C语言:返回两个数组中第一个元素的指针,并输出这个值 // //  main.c //  Pointer_search // //  Created by ma c on 15/8/2. //  Co ...

  5. 【c语言】用指针变量输出一维数组中的数据

    #include<stdio.h> void main(){     int i,*m,a[5];     printf("数组:"); //普通方式输出数组的元素   ...

  6. 字符串指针和指针数组输出

    字符串指针和指针数组输出 char *a = "perseverance"; printf("%s\n", a);//输出结果:perseverance pri ...

  7. 通过指针,输出对象数组的数据

    通过指针,输出对象数组的数据 (15 分) 设计一个类,主函数中建立一个对象数组,输入5个学生数据(学号.成绩),用对象指针指向数组首元素,输出5个学生的数据. 输入格式: 输入5个学生数据(学号.成 ...

  8. c语言 字符指针输出字符串,输出字符指针就是输出字符串

    本文收集整理关于输出字符指针就是输出字符串的相关议题,使用内容导航快速到达. 内容导航: Q1:C语言 如何用指针输出字符串中间的字符? #include"stdio.h" mai ...

  9. 【C 语言】二级指针作为输出 ( 指针输入 | 指针输出 | 二级指针 作为 函数形参 使用示例 )

    文章目录 一.二级指针 二.完整代码示例 一.二级指针 指针 作为 函数输入 : 调用者 负责 分配内存 ; 指针 作为 函数输出 : 函数 负责 分配内存 , 一般 传入二级指针 , 函数负责生成内 ...

最新文章

  1. ecliplse 调试android 断点,如何在Github maven项目上开始调试
  2. python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版
  3. 【C language】C语言二分法查找
  4. 社保,交得越多亏得越多(转)
  5. rog live service是什么_王者荣耀五周年好礼送不停,玩游戏还能白嫖ROG游戏手机3?...
  6. linux脚本实现红绿灯,javascript 如何实现红绿灯效果呢?
  7. vue动画transition(笔记)
  8. 重磅福利!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题...
  9. java面向对象课件_《JAVA面向对象基础》PPT课件.ppt
  10. Redis集群之官方集群
  11. 卷积神经网络中的池化方法(pooling)总结
  12. 电脑开机,总需要按F1,是什么原因造成的?
  13. 泡沫下的破浪者,智能语音产品到底落地何处?
  14. 阿里云基础产品技术月刊 2018年12月
  15. JavaSE 字符串
  16. 【TLSR825x】windows下开发环境搭建,固件烧录方法
  17. StartUml 用例图
  18. 插入参考文献时,本该显示为[1],但显示了{Zhao,2017,#253},解决方法
  19. 产品设计实战(上):Axure9绘制高保真原型
  20. 华为机试真题 C++ 实现【最大化控制资源成本】【100%通过率】【2022.11 Q4 新题】

热门文章

  1. 谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!
  2. 召回 粗排 精排,如何各司其职?
  3. Day03『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取
  4. 【Python】解决urllib返回http error 503问题
  5. 原 R语言柱状图排序和x轴上的标签倾斜
  6. 转:Some interesting facts about SharePoint 2007 Search
  7. Unity 找到隐藏的UGUI
  8. Python爬虫入门四之Urllib库的高级用法
  9. Linux 应用程序 网络通讯函数记录
  10. Ajax跨域请求解决方案——jsonp