指针笔记

来源:互联网 发布:知乎 学霸猫 编辑:程序博客网 时间:2024/06/10 14:56

指针:是一个存储计算机内存地址的变量

指针取值:从指针指向的内存读取数据

操作符 * :既可以用来声明一个指针变量,亦可用作指针的取值。当用在声明一个变量时,*表示这声明了一个指针。其他情况用到*表示指针的取值。

地址操作符 & :用来引用一个内存地址。通过在变量名字前使用&操作符,可得到该变量的内存地址

//声明一个int指针int * p;//声明一个int值int val = 20;//为指针分配一个int值的引用p = & val;//对指针取值int i = *p;printf("%d\n",i);


对指针变量赋值时需要注意:

(1)指针变量中只能存放地址。不要将一个数值赋给一个指针变量,如 int *ipPointer = 10,编译将出错。
(2)赋给指针变量的变量地址类型要与定义指针变量的类型一致。

int iValue = 5;float *ipPointer;ipPointer = &iValue;//非法。有的编译器报错,有的没有

指针变量作为函数参数:
  (1)作用是将一个变量的地址传递给另一个函数参数
  (2)若函数形参是指针时,函数实参要么是指向变量的指针,要么是变量的地址。

void F(int *pointer1, int *pointer2){ ... }1)F(&A,&B);2)int * P, *Q;int p = 1,q = 2;P = &p;Q = &q;F(P,Q);//F(p,q)是错误的

指针与数组
  在C语言中,数组名代表数组中首元素的地址。
  int array[100];  int *point;  point = array;  point = array[0];

point = array与point = array[0]等价。


指针与多维数组
#include <stdio.h>int main(){int a[3][4] ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int *p = NULL;p = a;printf("a=%d\n",*p);p = a[0];printf("a[0]=%d\n",*p);p = &a[0];printf("&a[0]=%d\n",*p);p = &a[0][0];printf("&a[0][0]=%d\n",*p);p = a[1];printf("a[1]=%d\n",*p);p = a[2];printf("a[2]=%d\n",*p);p = &a[0]+1;printf("&a[0]+1=%d\n",*p);p = a[0]+1;printf("a[0]+1=%d\n",*p);printf("&a[0]+1=%d\n",&a[0]+1);printf("a[0]+1=%d\n",a[0]+1);p = a+1;printf("a+1=%d\n",*p);return 0;}

在C程序中,可以用两种方法访问一个字符串
(1)用字符数组存放一个字符串
(2)用字符指针指向一个字符串
#include <stdio.h>int main(){char str[] = "Hello!";char *p = "Hi!";printf("%s\n",str);printf("%s\n",p);return 0;}

指针与常量

int num = 1;int other = 100;const int ci = 2;//常量int *pi = #const int *cpi = #//指向常量的指针int *const icp = #//指向非常量的常量指针//*icp = 9;//icp = &other;const int *const cpci = #//指向常量的常量指针


原创粉丝点击