首页
关于
Search
1
判断月份有几天
15 阅读
2
“熬”的境界
10 阅读
3
永远不要帮别人消耗自己
10 阅读
4
安装WMware报错
10 阅读
5
判断三位水仙花数
5 阅读
默认分类
文章
知识
C语言
全部
登录
Search
Typecho
累计撰写
11
篇文章
累计收到
0
条评论
首页
栏目
默认分类
文章
知识
C语言
全部
页面
关于
搜索到
11
篇与
的结果
2024-12-22
数组
指针指针的定义指针(Pointer)是编程语言中的一个对象,通过地址直接指向内存中该地址的值。由于通过地址能够找到所需的变量存储单元,可以说地址指向该变量存储单元,因此将地址形象化称为"指针"。总而言之,指针就是变量,存放内存单元的地址,存放在指针中的值都会被当作地址处理。类型含义short短整型(2字节)2^16int整型(4字节) 2^32long长整型(8字节)2^64float单精度浮点型(4字节)2^32double双精度浮点型(8字节)2^32char字符型(1字节) 2^8指针类型决定了指针进行解引用操作的时候,能够访问空间的大小。int* p;* p能够访问4个字节char* p;* p能够访问1个字节double* p:* p能够访问8个字节…依照不同变量类型所占字节大小依此类推#include <stdio.h> int main() { int a[] = {1,4,6,9};// 一个普通的整型数组 int *pa;// 一个指针变量,用于存储整型变量a的地址 pa = a;// 将a的地址赋给指针pa printf("pa指向的值: %d\n", *pa);// 输出指针pa指向的变量的值 printf("pa指向的地址: %p\n\n", pa);//pa的指针地址 printf("pa(a+1)的值:%d\n",*(pa+1)); printf("pa指向的地址: %p\n\n", (pa+1)); return 0; }运行结果pa指向的值: 1pa指向的地址: 000000000062FE00pa(a+1)的值:4pa指向的地址: 000000000062FE04因为int类型大小占用四个字节,所以是00到04其他同理指针的意义减少内存拷贝:通过传递指针而不是数据本身,可以避免在函数调用时复制大块的数据,从而节省内存操作的时间。动态内存管理:可以在运行时根据需要分配和释放内存,而不是在编译时确定内存大小,这样可以更高效地利用内存资源。高效的数据结构:指针是实现链表、树、图等动态数据结构的基础,这些数据结构在插入、删除和遍历操作方面比数组更高效。直接内存访问:指针允许直接操作内存地址,这使得数组和字符串处理更高效,因为可以通过指针算术快速遍历和修改元素。ps 简单来说,就是提高程序的效率,避免使用过多的变量,增加程序的压力写一个简单的例子#include<stdio.h> int main() { int arr[]={1,2,3,4,5,6,7,8,9}; int *p; p=arr; printf("这是数组\n"); for(int i=0;i<9;i++) { printf("%d\t",*p); p++; } return 0; } #include <stdio.h> int main() { int arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 定义并初始化数组 int i; printf("这是遍历\n"); // 使用for循环遍历数组 for (i = 0; i < 9; i++) { printf("%d\t", arr[i]); // 打印数组的每个元素 } return 0; }明显数组(0.1051秒)的运行速度比遍历(0.1385秒)的快空指针在指针声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。#include <stdio.h> int main(){ int* p = NULL; printf("p的地址是:%p",p); return 0; }运行结果p的地址是:0000000000000000野指针原因1.指针未初始化#include <stdio.h> int main(){ int a; // 局部变量不初始化,默认是随机值 int* p; // 局部指针变量未进行初始化,默认为随机值 *p = 20; return 0; }2.指针越界访问#include <stdio.h> int main(){ int arr[5] = {0}; int* p = arr; for (int i = 0; i <= 5; i++){ // 当i = 5时,指针的范围超出了数组arr的范围时,p就是野指针 *(p++) = i; } return 0; }2.指针指向的空间释放int* test() { int a = 10; return &a; } int main() { int* p = test(); //执行完此语句之后,test函数已经执行完毕,那么a的内存已经被释放了(因为执行了return),下面的解引用操作可能就是对别的项目在该内存地址的值进行赋值,会产生问题。 *p = 20; return 0; }指针的左值和右值左值:可以出现在赋值操作的左侧,有明确的内存地址,可以被修改。右值:不能出现在赋值操作的左侧,通常是表达式的计算结果,是临时值int a = 10;: a是一个左值,因为它是一个变量,有明确的内存地址。int b = 20;: b也是一个左值。int c = a + b;: (a + b)是一个右值,它是表达式的计算结果,是一个临时值。a = c;: a是左值,可以出现在赋值操作的左侧,而c是右值,是赋值操作的右侧。
2024年12月22日
5 阅读
0 评论
0 点赞
2024-12-21
数组的运用-杨辉三角模型
二维数组的应用-杨辉三角模型1.熟练运用数组2.理解杨辉三角模型需要解决的问题[ ] 默认数组为0改为不输出#include<stdio.h> int main() { int a[11][11]={1}; int i,j,sum; //赋值首尾都为一 for(i=0;i<=10;i++) { for(j=0;j<=10;j++) { a[i][0]={1}; a[i][i]={1}; } } for(i=2;i<=10;i++)//从第二行开始计算 { for(j=1;j<=10;j++)//从第二列开始计算 { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } //打印所有数组 for(i=0;i<=10;i++) { for(j=0;j<=10;j++) { printf("%5d",a[i][j]); } printf("\n"); } }AI改进的问题您的代码目的是生成一个杨辉三角,但存在一些问题。特别是:在初始化时,a[i][0]={1}; 和 a[i][i]={1}; 语法错误,应该使用 a[i][0] = 1; 和 a[i][i] = 1;。在杨辉三角的生成过程中,a[i][i] = 1; 会越界,因此应当在循环中仅给首尾位置赋值 1,而不是赋值给a[i][i]。在计算杨辉三角的值时,索引从1开始,第二行和第二列的赋值会有问题,应该调整为合适的索引。#include<stdio.h> int main() { int a[11][11] = {0}; // 初始化数组,默认值为0 int i, j; // 赋值首尾为1 for(i = 0; i <= 10; i++) { a[i][0] = 1; // 第一列设为1 a[i][i] = 1; // 对角线设为1 } // 计算杨辉三角的值 for(i = 2; i <= 10; i++) { // 从第二行开始计算 for(j = 1; j < i; j++) { // 第二列到第i列之间的元素 a[i][j] = a[i-1][j-1] + a[i-1][j]; } } // 打印杨辉三角 for(i = 0; i <= 10; i++) { for(j = 0; j <= i; j++) { // 只打印有效元素 printf("%5d", a[i][j]); } printf("\n"); } return 0; }
2024年12月21日
4 阅读
0 评论
0 点赞
2024-11-28
数字取反
#include<stdio.h> int main() { int n,s; printf("输入数字"); scanf("%d",&n); printf("输出"); do { s=n%10; printf("%d",s); n=n/10; } while(n!=0); printf("\n"); }
2024年11月28日
4 阅读
0 评论
0 点赞
2024-11-28
for循环的应用-判断最大公约数
#include<stdio.h> int main() { int m,n,i,min; printf("请输入两个正整数判断最大公约数\n"); scanf("%d%d",&m,&n); //找出最小值 if(m>n) { min=n; } else { min=m; } for(i=min;i>=1;i--) { //找出最大公约数 if(m%i==0&&n%i==0) { printf("最大公约数为%d",i); break; } } return 0; }
2024年11月28日
3 阅读
0 评论
0 点赞
2024-11-27
for循环的嵌套-打印99乘法表
for循环嵌套#include<stdio.h> int main() { int a,b; for(a=1;a<=9;a++) { for(b=1;b<=9;b++) { printf("%d*%d=%d\n",a,b,a*b); } } }
2024年11月27日
5 阅读
0 评论
0 点赞
1
2
3