复杂数据类型——指针

指针是C语言的精髓,不会指针就意味你没有学过C语言。

1、指针的基本使用

格式: 变量类型  *变量名;

指针变量只能存储地址,能够根据一个地址值,访问对应的存储空间

指针变量前面的int /double/char等类型,代表它只能访问此种类型的变量。

#include <stdio.h>

int main()

{     

int *p;

int a = 90;

//指针变量p指向了变量a

p = &a;

*p = 10;

a = 20;

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


/*

void change(int n);

int  n = 90;

change(&a);

printf("a=%d\n",a)

*/

return 0;

}

void change(int n)

{

n = 10;

}

2、练习

#include <stdio.h>

void change(int *n);

int main()

{

int n = 90;

change(&a);

printf("a=%d\n", a)

return 0;

}

void change(int *n)

{

*n = 10;//访问N这个变量指向的空间

}

3、指针使用注意:

不建议的写法, int *p只能指向int类型的数据

int *p;

double d = 10.0;

p = &d;

指针变来哪个只能存储地址

int *p;

p = 200;

指针变来哪个未经过初始化,不要拿来访问其他存储空间

int *p

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

另一种写法

int a = 10;

int *p;

p  = &a; //可以将两句直接写成 int *p = &a;

但是不能写成*p = &a,因为它是访问*p指向的地址,后面相当于又把a的地址给了p指向的空间

4、指向指针的指针


int main()

{

int a = 10;

int *p = &a;

int **p = &p;

char a2 = 'A';

char *p2 = &a2;

return 0;

}

5、指针练习

#include <stdio.h>

sumAndMinus(int num1, int num2, int *n3);

int main()

{

int a = 10;

int b = 7;

int he;

int cha;

cha =sumAndMinus(a, b, &he)

printf("和是%d,差是%d",he,cha);

return 0;

}

sumAndMinus(int num1, int num2, int *n3)

{

*n3 = a+b;

return a-b;

}

6、不管任何类型的指针,它都占据8个字节的存储空间。

7、指针与数组

int main()

{

int ages[5] = {10, 9, 8, 67, 90};

int *p;

//指针变量P指向了数组首元素。也可以写成p = &ages[0];

p = ages;

for(int i = 0; i<5; i++)  {

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

}

return 0;

}

指针变量的+1到底加多少,取决于指针的类型

利用一个指针来接收一个数组,指针变量array指向了数组的首元素

void change(int *array)

{

printf("%d\n",array[2]);

}

8、指针与字符串

int main()

{

char name[] = "itcast";

//"it" = 'i' + 't' + '\0'

//  指针变量name2指向了字符串的首字符,里面的字符不能修改

char *name2 = "it";

*name2 = 'T';

//printf("%c\n", *name2);

//  输出结果是Tt

printf("%s\n", name2);

return 0;

}

9、指针数组和字符串输入

//指针数组(字符串数组)

char *name[5]={"jack", "rosr", "jake"};

//二维数组(字符串数组)

char name2[2][10] = {"jack", "rose"};

10、返回指针的函数

char *test();

int main()

{

char *name = test()

//输出结果是ROSE

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

return 0;

}

char *test()

{

return "rose";

}

11、指向函数的指针  

#include <stdio.h>

void test()

{

printf("调用了test函数\n");

}

int main()

{

//(*p)是固定写法,代表指针变量P将来肯定是指向函数

//左边的void代表指针变量P指向的函数没有返回值

//右边的():指针变量P指向的函数没有形参

void (*p)();

//函数名代表函数的地址,数组名也是代表数组的地址

p = test;

(*p)(); //利用指针变量间接调用函数

// test();   直接调用函数 P();

return 0;

}

修改完已经23.19了,睡觉了,明天早起,继续奋斗~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值