c 指针初探

1 int main()
2 {
3    int x = 1;
4    int *p = &x;
5    *p = 4;
6     return 0;
7 }

生成的汇编如下

1 movl    $1, -12(%rbp)     x=1 压栈到 M(%rbp - 12)
2 leaq    -12(%rbp), %rax   取&x 到寄存器 %rax  *p = &x
3 movq    %rax, -8(%rbp)    p  压栈
4 movq    -8(%rbp), %rax    读 p 到寄存器
5 movl    $4, (%rax)        p中的值 = 4

从以上得知,指针就是地址, *p 就是地址的中值。

时间: 2024-08-12 14:39:14

c 指针初探的相关文章

把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另一个vector,也是将一个vector 的元素逐个赋值给另一vector 的对应元素: //将一个vector 赋值给另一vector,使用迭代器访问vector 中的元素 vector<int> ivec(10, 20); vector<int> ivec1; for (vecto

C语言学习之路——指针初探

进来学习C语言碰到了指针,着实学了一段时间,搞不出个头绪,今日感觉有些眉目,来此做个记录,也望能给困顿的人一起分享下感悟. 学习指针还要从变量,数组,函数的定义这些基础说起. 如:int a=10; int a[]={1,2,3,4}; int max (int x,int y) { .... } 学习C语言指针我想指针变量的定义就不用说了吧. 先上一个例子然后再给大家一一展开进行讲述. #include<stdio.h>int main(){int a;scanf("%d"

引用和指针初探

引用 &(左值引用--Lvalue reference) 引用即别名(并非对象),引用是一个对象的另外一个名字,且只能是一个对象,所以引用必须被初始化,一但初始化后便不能再改变引用的值,因为引用是很专一的. 一般在初始化变量时,初始值会被拷贝到新建的对象中,然而引用只是把它和它的初始值绑定在一起,并不是将初始值拷贝给引用.所以在调用引用的时候能加快程序的运行速度. 引用和取地址符的区分: 引用一般出现在声明语句中,紧跟类型名:取地址符出现在表达式的右边,是一个运算符. int i = 42; i

指针初探,指针的简单应用

#include<stdio.h> void minmax(int a[],int len,int *min ,int *max);int main(){ int a[]={1,2,3,4,5,6,7,8,2,4,1,6,8,2,78,2,4,54,4,5,4,61,5,58,55,}; int min,max; minmax(a,sizeof(a)/sizeof(a[0]),&min,&max); printf("%d %d",min,max); retu

你必须知道的指针基础-7.void指针与函数指针

一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针”. 因此void*只能表示一个地址,不能用来&取值,也不能++--移动指针,因此不知道多少字节是一个数据单位. int nums[] = {3,5,6,7,9}; void* ptr1 = nums; //int i = *ptr1; // 对于void指针没法直接取值 int* ptr2 = (i

第41课 内存操作经典问题分析一

1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是NULL指针,是指向不可用内存地址的指针 (3)NULL指针并无危害,很好判断,也很好调试 (4)C语言中无法判断一个指针所保存的地址是否合法 2. 野指针的由来 (1)局部指针变量没有被初始化 (2)指针所指向的变量在指针之前被销毁 (3)使用己经释放过的指针 (4)进行了错误的指针运算 (5)进行了错误的强制类型转换 [实例分析]野指针初探 #include <stdio.h> #include <m

c语言入门经典(第5版)

文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF    [点击下载] C语言入门经典(第5版)  内容简介: C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad和其他苹果设备编程中使用的Objective-C语言的基础:C语言是在很多环境中(包括GNU项目)被广泛使用的C++语言的基础.C语言也是Li

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

初探C/C++ typedef关键字

提问 我知道typedef是类型别名的意思,也知道结构体如何定义. 但下面的代码: typedef struct node{ struct node*lchild; char data; struct node*rchild; }bitnode,*bitree; 那这样结构体后面的是对象还是别名呢?我感觉应该是对象,但typedef又无从说起. 然后接着有 bitree createtree(){ -- } 很明显bitree是一种类型,但他又是一个指针,我能说他就是指向这个结构体的对象的指针么