返回

[C语言]指针

发布时间:2022-09-28 11:22:23 307
# 数据

指针的本质:

#include 

//&符号--->取地址,也称引用,通过该操作符我们可以获取一个变量的地址值
//指针变量的初始化一定是某个变量取地址
//取值操作符为*,也称解引用,通过该操作符我们可以得到一个地址对应的数据
int main()
{
/*int i = 5;
int* i_pointer = &i;*/

int i = 5;
int* p = &i;
printf("i = %d\n", i);//直接访问
printf("*p = %d\n", *p);//间接访问
return 0;

//定义多个指针变量
//int* a, b, c; 错误示范
int* a, * b, * c;
}

[C语言]指针_C语言

 

 

编程思维锻炼:

一、

#define _CRT_SECURE_NO_WARNINGS
#include

// 利用while或者for循环计算n!的值
int main()
{
/*int n;
scanf("%d", &n);
int i = 1, total = 1;
while (i <= n) {
total = total * i;
i++;
}
printf("%d! = %d\n", n, total);
return 0;*/

int n;
scanf("%d", &n);
int i, total;
for (i=1,total=1; i <= n; i++) {
total = total * i;
}
printf("%d", total);
return 0;
}

二、

#define _CRT_SECURE_NO_WARNINGS
#include

//某人想将手中的一张面值100元的人民币换成10元,5元,2元和1元面值的票子。
//要求换正好40张,且每种票子至少一张。问有几种换法?
//枚举法(穷举法)
int main()
{
//a,b,c,d分别代表10元,5元,2元和1元的张数
int a, b, c, d, e = 0;
for (a = 1; a <= 9; a++)
{
for (b = 1; b <= 19; b++)
{
for (c = 1; c <= 37; c++)
{
for (d = 1; d <= 37; d++) {
if (a * 10 + b * 5 + c * 2 + d == 100 && a+b+c+d == 40)
{
e++;//e代表的是有多少种换法
}
}
}
}
}
printf("%d\n", e);
return 0;
}

三、

#define _CRT_SECURE_NO_WARNINGS
#include

//输入N个数(N小于等于100),输出数字2的出现次数;
//输入的格式是两行
//第一行输入要输的元素个数,比如:5
//第二行输入1 2 3 2 1 2,那么输出结果为3,因为2出现了3次

int main()
{
int n;
scanf("%d", &n);
int arr[100];
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
//统计2出现的次数
int count = 0;
for (i = 0; i < n; i++)
{
if (arr[i] == 2)
{
count++;
}
}
printf("2出现的个数 = %d\n",count);

return 0;
}

四、

#define _CRT_SECURE_NO_WARNINGS
#include
#include
/*
读取一个字符串,字符串可能含有空格,将字符串逆转,原来的
字符串与逆转后字符串相同时,输出0,原字符串小于逆转后字符串输出-1,
大于逆转后字符串输出1.例如输入hello,逆转后的字符串为olleh,
因为hello小于olleh,所以输出-1
*/
int main()
{
char c[100],d[100];
gets(c);
int i, j;
//字符串翻转
for (i = strlen(c) - 1, j = 0; i >= 0; i--, j++)
{
d[j] = c[i];
}
d[j] = '\0';
puts(d);
int result = strcmp(c, d);
if (result > 0)
{
printf("%d\n", 1);
}
else if(result < 0)
{
printf("%d\n", -1);
}
else {
printf("%d\n", 0);
}
return 0;
}

 

指针的传递:

#include 

//指针的使用场景之一 ---- 指针的传递
void change(int *j)
{
*j = 5;//指针的间接访问
}

int main()
{
int i = 10;
printf("before change i = %d\n", i);
change(&i);
printf("after change i = %d\n", i);
/*函数调用是值传递*/
return 0;
}

 

指针的偏移:

#include 
//指针的使用场景之一 ---- 指针的偏移
/*
数组是特殊的,不能和整型变量,浮点型变量,字符型变量类比
数组名 a 类型是数组,a里面存了一个值,是地址值,是数组的起始地址
*/
int main()
{
int a[5] = { 1,2,3,4,5 };
/*
int* p = 0xcccccccc;
如果上述定义指针类型变量的话,会产生
引发了异常:读取访问权限冲突。
p是0xCCCCCCCC。

出现上述异常是因为对应内存位置不可读
内存分为3种权限:可读、可写、可执行
掌握可读,可写
*/

int* p;
p = a;
//对一个指针变量进行取值,得到的类型是其基类型,所以下面取值使用%d
printf("*p = %d\n", *p);
for (int i = 0; i < 5; i++)
{
printf("%d\n", *(p + i));
}
return 0;
}

数组是特殊的,不能和整型变量,浮点型变量,字符型变量类比

数组名 a 类型是数组,a里面存了一个值,是地址值,是数组的起始地址

[C语言]指针_C语言_02

 

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
《TypeScript》 - 元组 2022-09-28 10:48:08