指针是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了,睡觉了,明天早起,继续奋斗~~