c语言入门指针,C语言入门-指针入门

指针概述

所有的变量都会在内存空间分配一块内存,指针是用来表示这块内存空间的地址的,可以用取地址符&来获取一个变量在内存空间的地址,如果想存放一个地址,就可以用一个指针变量来存放,存放内存地址的变量就是指针变量

指针是用来表示一块内存地址的,指针变量是用来存放内存地址的

#include

#include

main()

{

int i = 10;

int* p = &i;

printf("%#x\n",p);

//p = NULL;

//printf("i=%d\n",i);

//i=10

//printf("*p=%d\n",*p);

//*p=10

//*p = 100;

//printf("i=%d\n",i);

//i=100

i = 90;

printf("*p=%d\n",*p);

//*p=90

/**

总结

p是一个指针变量,存储的是i的内存地址

*p和i其实代表的是同一块内存空间

*/

system("pause");

}

值的交换

#include #include

//形参i,j等于是重新开辟了两块内存地址更跟实参i,j已经没有什么关系了

void swap(int i,int j){

int temp;

temp = j;

j = i;

i = temp;

}

//p,q和i,j代表的都是同一块内存地址

void swap_pointer(int* p,int* q){

int temp;

temp = *q;

*q = *p;

*p = temp;

}

main()

{

int i = 10;

int j = 30;

printf("交换前...\n");

printf("i=%d\n",i);

printf("j=%d\n",j);

//swap(i,j);

swap_pointer(&i,&j);

printf("交换后...\n");

printf("i=%d\n",i);

printf("j=%d\n",j);

system("pause");

}

指针当中的常见错误

#include #include

main()

{

/**垃圾指针,野指针*/

//int* p;//p还未指向任何内存空间,不能够被使用

//printf("*p=%d\n",*p);

//*p = 2425;

/**类型的不同的指针不可以相互转换*/

int i = 9999;

char* c;

c = &i;

printf("*c=%c\n",*c);

system("pause");

}

不可使用已回收掉了的指针变量

#include #include

//函数完成时i将会被回收

void func(int** q){//代表的是指针变量的指针变量

int i = 3;

*q = &i;//*q代表的是指针变量p

}

main()

{

int* p;

printf("p的内存地址为%#x\n",p);

printf("i=%d",*p);//注:有可能在i还未被回收时获取到值

system("pause");

}

通过传递指针变量让子函数修改主函数中变量的值

#include

#include

//可以通过传递指针变量的方式,在子函数中修改主函数中变量的值

void func(int* p,int* q){

*p = 100;

*q = 200;

}

main()

{

int i = 10;

int j = 20;

func(&i,&j);

printf("i=%d\n",i);

printf("j=%d\n",j);

system("pause");

}

字符串和数组

#include #include

/**

数组是一块连续的内存空间

数组的名字代表的是数组的首地址和arr[0]的内存地址是一样的

后续元素的内存地址都是在首地址的基础上后移

arr[0] == *(arr+1)

*/

//打印数组中的每一个元素

void printArr(int* arr,int len)

{

int i=0;//c99版本中必须在外面进行初始化

for(;i

{

printf("arr[%d]=%d\n",i,*(arr+i));

}

}

main()

{

//字符串数组

char carr[20] = {'a','b','c','\n'};

printf("carr=%s\n",carr);

printf("carr=%#X\n",&carr);

printf("&carr[0]=%#X\n",&carr[0]);

printf("carr[1]=%c\n",*(carr+1));

//char指针类型来代替字符串

//char* arr1 = "abc\n";

//printf("arr1=%s",arr1);

int  arr[5] = {1,2,3};

printf("arr=%#x\n",arr);

printf("&arr[0]=%#X\n",&arr[0]);

printf("arr[1]=%d\n",*(arr+1));

printArr(arr,5);

system("pause");

}

指针的运算

#include

#include

/**

指针的运算并不是向上或向下移动一个字节

而是按照约定的类型,移动约定的类型的字节数

*/

main()

{

//char类型在内存中占一个字节

char charArr[4] = {'a','b','c','d'};

char* cp = &charArr[2];

printf("*(cp-1)=%c\n",*(cp-1));

//int类型在内存中占4个字节

int intArr[4] = {1,2,3,4};

int* ip = &intArr[2];

printf("*(ip-1)=%d\n",*(ip-1));

system("pause");

}

指针占多少个字节

#include

#include

main()

{

int i = 2;

float f = 2;

double d = 2;

char c = 'b';

int* ip = &i;

float* fp = &f;

double* dp = &d;

char* cp = &c;

printf("int指针占的长度为%d\n",sizeof(ip));

printf("float指针占的长度为%d\n",sizeof(fp));

printf("double指针占的长度为%d\n",sizeof(dp));

printf("char指针占的长度为%d\n",sizeof(cp));

/**

int指针占的长度为4

float指针占的长度为4

double指针占的长度为4

char指针占的长度为4

*/

/**

32位操作系统最大表示的内存空间为2的32次方

指针只需要4位 就可以表示出来所有的内存空间

64位操作系统,当编译器支持64位时,指针所占的长度为8byte

*/

system("pause");

}

函数指针

#include #include

int add(int x,int y)

{

printf("x+y=%d\n",x+y);

}

main()

{

//函数指针

int (*pFunc) (int x,int y);

pFunc = add;

pFunc(4,9);

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值