指针学习记录

指针偏移直接用运算符 “+”,后面写上偏移量,不能用数组下标的方式,数组下标只是取值。
例如:

int main()
{
int a[10] = {2,8,7,3,5,6,4,1,9,10};    //此时,数组名 a 可以看做是该数组的指针常量

/* 取地址 */

printf("a+1 的地址为: %x\n",a+1);      //此时指针 a 向右偏移了1 ,指向了该数组的第二个元素 ‘8’ (数组初始化后,指针默认指向第一个元素)
//打印结果为 a+1 所指元素的地址,是一个 8 字节(64位平台)大小的十六进制数,32位平台则是 4 字节大小

printf("a+1 的地址为:%x\n", &a[1]);      //同理,用运算符 ‘&’ 可以得到 a+1 的地址

int *p = a+1;  //这时,创建一个指针变量并将 a+1 的值赋给它

printf("a+1 的地址为:%x\n", p);      //这样也能得到 a+1 的地址

printf("p 的地址为:%x\n", &p);      //同理,这样也能得到指针 p 的地址
//指针变量 p 存放的是 a+1 的地址,同时,它自己也有地址

int **s = &p;      //这时,我们再创建一个二级指针 s ,用来存放指针 p 的地址

printf("p 的地址为:%x\n", s);      //这样也能得到指针 p 的地址

/* 取值 */

printf("a+1 == %d\n",*(a+1));    
// *(a+1) 是对 a+1 这个地址指向的元素取值,用运算符 ‘*’
//所以,打印结果为:a+1 == 8

printf("a+1 == %x\n", **s);        // a+1 指向元素 8 ,指针 p 指向 a+1 ,指针 s 指向 p
// 所以,打印结果为:a+1 == 8

return 0;
}


//从上到下,所有打印结果为:
/**
a+1 的地址为: db79f75c
a+1 的地址为:db79f75c
a+1 的地址为:db79f75c
p 的地址为:db79f798
p 的地址为:db79f798
a+1 == 8
a+1 == 8
*/
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘抄自百度百科:https://baike.baidu.com/item/函数指针/2674905?fr=alad...
    Macade阅读 314评论 0 0
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,235评论 0 9
  • Lua之参考 https://www.yiibai.com/lua/lua_basic_syntax.html[h...
    xiao_mini阅读 800评论 0 0
  • 参考文献 Swift结构体指针操作官方文档Swift 和 C 不得不说的故事Swift指针和托管,你看我就够了 W...
    沉静BBQ阅读 8,214评论 1 25
  • 一、用处 参考为什么要有指针?指针究竟是什么?是地址?还是类型?指针究竟有什么用? 1.变量一个东西在内存里面,而...
    合肥黑阅读 1,191评论 0 0

友情链接更多精彩内容