c指针

作者: 安公子_ | 来源:发表于2017-04-28 14:27 被阅读0次
- 地址与值的关系

举例:
图中表明了计算机中内存的存在形式,矩形框上面的整数为地址编号(内存完成编号)。这样的编号对于程序设计来说显得十分不变。因此,指针诞生了。


计算机中的内存形式.png

高级语言的特点就是通过变量来访问内存位置。将以上这张图中的地址位置号用变量替换后如下图。


用变量替代地址位置.png 值得注意的是,地址变量与内存之间的关联并不是有硬件实现,而是由编译器完成这个操作。硬件通过地址访问内存。
int a =112 , b =-1 ;
float c = 3.14;
int *d = &a; 
int *e = &c;

但是,图中地址c中的值并不是float,而是int。所以不能简单地通过地址中的值来判断程序中变量的值,而应该从程序中判断这个内存对应的值和类型。
另外,操作符&表针初始化操作。如*d = &a,表示为变量a的地址为d,也就是编号为100

- 定义指针操作符——&

值得注意的是,d,e被声明为指针,并不会改变指针对应的值的操作方式:变量的值就是分配给这个变量对应的内存中的值。即地址100(d),108(e)中的值为多少取决于a,c
另外,&不能位于=左边。

  • 间接访问操作符——*
    若想访问a,c,除了直接使用变量(直接访问)a,c外,还可以用间接访问方式*d,*e.
    间接访问过程.png *Note:指针一个整数值
- 未初始化和非法指针

例如:

int *a;
*a = 123;

这样做的意图为:声明一个指针变量,往指针变量对应的内存中存放123,但是!存在编号多少的内存呢?这就不得而知了。
如果变量为静态的,这被初始化为0;如果变量是自动的,则不会被初始化。当执行程序时,这种做法可能会随机访问到一些不该访问的内存(如程序中其他变量对应的地址)。为了防止这种间接访问方式造成不可预知的错误,所示使用这种方式前,一定要确保这个变量之前被初始化了。
正确的方式:

int i=123;
*a = &i;

另一种正确的方式:
*&a=123;
&操作符产生变量a的地址,*操作符表示引用变量a的地址,则整个表达式的意义为——a=123

- 指针表达式

以下面的代码为例。

char ch = 'a' ;
char *cp = &ch ;

——变量ch的地址。

1.png ——指针cp 2.png ——指针变量cp的地址 3.png ——*cp得到变量ch的值 4.png ——*的优先级高于+,所以*p+1表示ch+1'a'+1 5.png ——*(cp+1)得到下一个第一的值 6.png ——指向下一个地址 7.png ——首先保存当前地址,再指向下一个地址 8.png ——间接访问cp+1中的值 9.png ——++操作符首先产生cp的一个拷贝,然后再++操作符增加cp的值,最后在cp的拷贝上执行操作(++操作符的优先级高于* 10.png ——因为两个操作符的结合方向都是从右往左,故执行ch+1 11.png ——首先间接访问,然后自增,但ch仍然是原来的值 13.png ——ch自增 14.png

相关文章

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • 再学C语言之指针要点

    C之字符数组 C之指针引用字符串 C语言之数组指针 数组指针:首先它是一个指针,它指向数组指针数组:首先它是一个数...

  • 智能指针

    指针的危害 指针未初始化 野指针 内存泄漏 参考阅读C/C++指针使用常见的坑 智能指针分类 本质:将指针封装为类...

  • C++ 指针常量、常量指针和常指针常量

    参考:C++ 指针常量、常量指针和常指针常量

  • Go语言 值,指针,引用类型

    Go语言的指针与C或C++的指针类似,但是Go语言的指针不支持指针运算,这样就消除了在C或C++程序中一些潜在的问...

网友评论

      本文标题:c指针

      本文链接:https://www.haomeiwen.com/subject/looozttx.html