C语言的指针

时间:2023-01-13 15:59:00

  C语言的指针:

  C语言中指针的基本知识点:

#include <stdio.h>


int main () {
int urn[5] = {100,200,300,400,500};
int *ptr1, *ptr2, *ptr3;
ptr1 = urn; //直接把数组地址给指针ptr1
ptr2 = &urn[2]; //把数组第三个数值的地址给指针ptr2;
printf("urn adress is : %p\n", urn);
printf("ptr1 = %p, *ptr1 = %d ,&ptr1 = %p\n",
ptr1, *ptr1, &ptr1); // 要注意指针指向的地址, 指针指向的地址的值, 指针的地址 之间的区别;

ptr3 = ptr1 + 4;
printf("adding an int to pointer:\n");
printf("ptr3 = %d", *ptr3);
ptr1++;
printf("value after ptr1++\n");
printf("ptr1 = %p, *ptr1 = %d ,&ptr1 = %p\n",
ptr1, *ptr1, &ptr1);
ptr2--;
printf("value after ptr2--\n");
printf("ptr2 = %p, *ptr2 = %d ,&ptr2 = %p\n",
ptr2, *ptr2, &ptr2);
--ptr1;//ptr1恢复为初始值;
++ptr2;//ptr2恢复为初始值;

printf("substracting on pointer from another: \n");
printf("ptr2 = %p, ptr1 = %p ; ptr2-ptr1 = %d\n",
ptr2, ptr1, ptr2-ptr1); //指针指向地址的值的地址的减法;

printf("substring an int from a pointer : \n");
printf("ptr3 = %p, ptr3-2 = %p ,*(ptr3-2) = %d\n",
ptr3, ptr3-2, *(ptr3-2));
return 0;
}

  下面的列表描述了可对指针变量执行的基本操作:

  1:赋值, 可以把一个地址赋值给一个指针 , 通常使用< ptr = 数组名, 或者ptr = &变量值>

  2:求值或者取值, 使用*可以取出指针在内存中的值;

  3:取指针地址, 使用&可以获取指针的内存地址;

  4:把一个整数加给指针, 根据指针指向的类型 , 当前的指针向后或者向前移动 , ptr+4或者&urn[4]

  5:从指针中减去一个整数 , 指针所指向的内存地址发生改变;

  6:求差值:两个指针之间的差值, 为两个指针的距离;

  注意:这里有两种减法, 可以用一个指针减去一个整数获取到另外一个指针, 或者用指针减去指针得到另外一个整数; 

   C语言的指针:

 

  变量指针和常量指针:

  数组就是一个常量指针, 无法被修改;

  变量指针,通过*声明的指针都是变量指针, 指针可以被随意修改;

  函数指针:

int (*foo[])(int)       数组里面允许有函数指针(数组foo里存储的是指向函数的指针)
int foo[][] 数组里面允许有其他数组
char * (*fun1)(char * p1,char * p2); 函数为fun1的指针, 返回值为char*的

  C++的知识点:指针,链表,类, 模版字符串 

 

 

  eof

天道酬勤