关于C语言指针【第一季】

简介: 关于C语言指针【第一季】

【关于指针】

& 地址运算符  *指针运算符或间接寻址运算符

1.指针的一个很重要的用途:作为实参传给函数.

2.注意下面两条语句:

    a=*p++;     a=(*p)++;

   由于*和++运算符属于同级,是右结合的。所以第一个相当于“a=*(p++);”又因为++运算符位于变量p的后面,所以是后缀运算,,所以      a=*p++;相当于a=*p;p=p+1;

  而第二条语句a=(*p)++;相当于a=*p;*p=*p+1;

3.数和数组的指针

  在函数的形参和实参中,

  如果一个数要做指针传递,

  形参 void Fuc(void *a);实参 Fuc(&a);

  而数组时void a[N];

  形参  void Fuc(void a[]);实参 Fuc(a);

4.字符指针

  以字符数组和字符指针对比

  char str[10]={"china"};   char *ptr="china";

  str代表字符串在内存中的首地址。

  ptr代表指向字符串"china"首地址的一个指针。ptr==str;

  对于字符指针赋值,必须让指针指向一个数组的首地址。

  对于字符数组的首地址,是常量不能改变,用*(str+i)方式引用,对于字符指针可以改变可以通过*(ptr+i)或者*(++ptr)方式引用

5.二维数组的指针引用

  char str[5][5], *p;

  对于二维数组中的某个值str[2][2]的引用可以直接写成cout<<*(*(str+2)+2);用二维数组名直接引用。

  也可以采用

    p=a[2];  *(p+2);方式

   或者可以

    p=*str;  *(p+2*5+2)

  **注意一点,不要误写成p=str;这样就成了第一行的首地址了,而不是第一行的第一列的值的地址。。

   **还有一种用【行数组指针】的写法

  char (*p)[5]; p=str;这样p就和数组名str一样可以用cout<<*(*(p+2)+2)方法引用了

  str[0]==*str==&str[0][0];

  【关于二维数组指针的误区】

   a[5][5];

   要吧a和a[0]区分开,虽然都是首地址,但是指向的对象不同。a[0]指的是二维数组中一维数组的首地址,对它进行寻址运算得到的是一个     数组值,即a[0]数组的第一个元素的值a[0][0].可是a是一个数组的名字它指向的是所属元素的首元素。对他寻址得到的是首元素a[0][5]      是一个一维数组。所以二者不可混淆。

    行数组指针定义成char (*p)[5];它代表的是*p有5个char型的元素分别指向(*p)[0],(*p)[1],(*p)[2],(*p)[3],(*p)[4],即指向5个char型数组

         p    ——>|str[0][0]|str[0][1]|............

         p+1——>|str[1][0]|str[1][1]|............

         p+2——>|str[3][0]|str[3][1]|............

            ..........................


相关文章
|
1月前
|
存储 C语言
【C语言篇】深入理解指针3(附转移表源码)
【C语言篇】深入理解指针3(附转移表源码)
36 1
|
27天前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
45 0
|
26天前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
15 2
|
26天前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
26天前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
1月前
|
存储 C语言
C语言32位或64位平台下指针的大小
在32位平台上,C语言中指针的大小通常为4字节;而在64位平台上,指针的大小通常为8字节。这反映了不同平台对内存地址空间的不同处理方式。
|
1月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
|
存储 C语言
C语言指针与指针变量的区别指针
指针是C语言中的重要概念,用于存储内存地址。指针变量是一种特殊的变量,用于存放其他变量的内存地址,通过指针可以间接访问和修改该变量的值。指针与指针变量的主要区别在于:指针是一个泛指的概念,而指针变量是具体的实现形式。
|
1月前
|
C语言
C语言指针(3)
C语言指针(3)
11 1
|
1月前
|
C语言
C语言指针(2)
C语言指针(2)
13 1