C语言基础-指针基础

指针基础

一、什么指针[ps:地址=指针]

   1、什么地址:

          内存区的每一个字节都有一个编号,这就是“地址”

   2、直接访问和间接访问

          分水岭:指针

          间接访问:即,将变量i的地址存放在另一个变量中。

二、什么是指针变量

   存放地址的变量

定义:

          基类型 *指针变量名;

备注:

          1、基类型->指针变量所指变量的数据类型

          2、“*”表示所定义的变量是指针变量

          3、变量名是ptr,而非*ptr

例子:

          int 	*ptr;
          p_ws/pWs  

使用:不能直接给一个指针变量赋值为整形

          1、通过&运算符赋值
             p_var= &var;
          2、通过另外一个指针变量赋值
             p_var1= p_var2;
          3、通过NULL赋值
             p_var1= NULL;代表空指针

备注:

   &:取地址(&是一元运算符,它返回操作数的内存地址)

   *:取值(*是 &的反运算符,它也是一元运算符,返回指针指向的内存位置中的值)

   优先级和结合方向:“&”和“*”两个运算符的优先级别相同,但按自右而左方向结合

int*p_var1 = &a, *p_var2 = &b;

备注:

   p_var:代表指针变量
   *p_var:指针变量所指的变量
   p_var1= &*p_var2;     -> p_var1 = &b;
   p_var1= *&p_var2;

*p_var1++和 (*p_var)++区别

   int a = *p_var1++:
   1、取得*p_var1的指
   2、p_var1指针加1

指针的算数运算:

          指针±整数  或者  指针 -指针
          指针±整数:代表指针(+)向后偏移x位(根据指针数据类型),(-)向前偏移x位
          指针 - 指针:代表两个指针变量的内存距离

          备注:指针 + 指针 错误

指针的作用:

  1. 使程序简洁、紧凑、高效
  2. 有效地表示复杂的数据结构
  3. 动态分配内存
  4. 得到多于一个的函数返回值

三、什么是数组指针

数组指针:

          是指数组的起始地址,也就是第一个元素的地址。数组的指针是个常量指针。

指针数组:

          是指一个数组,里面的元素类型都是指针

因为:数组名是数组的首地址 == 数组名就是数组的指针所以:可以像操作指针那样操作数组名

例子:

   int ary[] = {1,2,3,4,5,6,7,8,9,10};
   ary+ 2 -> &ary[2]
  &ary[2]-> &(*(ary + 2))

四、什么是字符串指针

字符串指针(指向字符串的指针)C语言中没有特定的字符串类型,
我们通常是将字符串放在一个字符数组中。

字符数组和字符串指针的区别:

字符数组存储在全局数据区或栈区,字符串存储在常量区。
全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,
而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。

例子:

#include <stdio.h>
int main()
{
 char *str = "Hello World!";	
 str = "I love	C!";  //正确	
 str[3] = 'P';  //错误
 return 0;
}
上一篇:python class1


下一篇:聊聊CAS - 面试官最喜欢问的并发编程专题