0120 C指针跳转、数组名指向(笔记)
目录
一、数组
二、指针
三、代码练习
三、杂谈
一、数组
1.数组内存在预处理阶段已经分配好,变量编译阶段分配不行 宏替换 #define MAX_SIZE 1024 int a[MAX_SIZE] 可以变量 int MAX_SIZE = 1024; int a[MAX_SIZE] 不可以2.strcpy(stu.name , "数组整体操作赋值用strcpy");|%-10s|id|%d|age|%d|sex|%c|\n //数据库形式输出3.数组首元素地址 a = &a[0] 第二个元素地址 a + 1 = &a[1] 数组地址 &a 超出数组空间 &a + 14. printf("整个数组的大小:%d\n",sizeof(a))printf("a[0]的大小:%d\n",sizeof(*a))printf("指针的内存大小:%d\n",sizeof(a))
二、指针
1.数组指针:int (*a)[10]函数指针:void (*fun) (int, int)指针函数:int* fun() //函数返回指针,指针指向的不能是局部变量2.数组和指针的联系1、数组名可以当成指针使用2、a:数组首元素的地址 a = &a[0] a + 1 = &a[1]&a &a + 13.数组作为函数参数被传递是,数组名会被弱化为指针//main() { printf(sizeof(a)) } 输出:整个数组大小//func(int a[]) { printf(sizeof(a)) } 输出:指针大小 83. 指针大小: 8字节占满计算机计算位数 1)32位地址总线4B 64位地址总线8B(地址总线,数据总线,控制总线) 2)但内存可扩充可虚拟化所以一律按8B4. 内存泄漏:malloc没有free释放堆空间 new(C++)
三、代码练习
1.两数交换
#include<stdio.h>int main()
{int a = 3, b = 4;//中间变量法,空间换时间int temp = a;a = b;b = temp;printf("中间变量法:a = %d,b = %d\n",a,b);//数轴法/算术法,//加法可能上溢出//减法可能下溢出a = a + b;b = a - b;a = a - b;printf("加法式:a = %d,b = %d\n",a,b);//位操作发,不会溢出//异或操作a = a ^ b;b = a ^ b;a = a ^ b;printf("位操作法:a = %d,b = %d\n",a,b);return 0;
}2.代码实际五大内存分配位置
//main.cpp
int a = 0; //全局初始化区
char *p1; //全局未初始化区
void main()
{ int b; //栈 char s[] = "abc";// 栈 char *p2;// 栈 char *p3 = "123456";// 123456\0在常量区,p3在栈上。 static int c =0; //全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
} 3.输入10a10 输出:?
#include<stdio.h>int main()
{int a = 1, b = 3;char c[10] = {0};scanf("%d%s%d",&a, c, &b); //输入10a10 输出:?printf("%d\n", a); //10printf("%d\n", b); //未知,因为a是10 c是a10 还要再输入一个数printf("%s\n", c); //a10return 0;
}4.判断大小端存储
#include<stdio.h>union demo
{int a;char ch[4];
};int main()
{union demo d;d.a = 0x12345678; int i;for (i = 0; i < 4; i++){printf("%x\n",d.ch[i]);}return 0;
}5.char c = 0 和 char c = '0' 是不一样滴
#include<stdio.h>
#include<string.h>int main()
{char a[1000];int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;//printf("%4d",a[i]);}printf("%ld\n",strlen(a)); //输出255,这里0不是'0',转换为ASCII就是'\0' ,就是NULLreturn 0;
}6.在x86系统下,其值为多少? 输出;2019 2017
#include<stdio.h>int main()
{int a[4] = {2016,2017,2018,2019};int *ptr1 = (int *)(&a + 1);int *ptr2 = (int *)((int)a + 1); //windows下地址转不成数,当题看printf("%x, %x",ptr1[-1],*ptr2); //2019, 2017return 0;
}
三、杂谈
1.虚拟机回环网络解决:执行: dhclient -v2.find结果传给wc 显示当前目录下.c文件数find . - name "*.c" | wc -l3.小心中英文空格4.%p地址输出符 %x转换为16进制5.待看:makefile默认规则,git是啥
0120 C指针跳转、数组名指向(笔记)相关推荐
- C++/C中 sizeof(指针)和sizeof(数组名)的区别
1.sizeof(array)/sizeof(int)的含义 array是个数组 sizeof (array)就是这个数组所占的内存总量(字节数), sizeof(int)就是单个所占的内存. 所以呢 ...
- c语言 数组指针,C语言数组名及指向数组指针的小结
相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址. 现在有这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地 ...
- 数组名和指针(这里为指向数组首元素的指针)区别?
二者均可通过增减偏移量来访问数组中的元素. 数组名不是真正意义上的指针,可以理解为常指针,所以数组名没有自增.自减等操作. 当数组名当做形参传递给调用函数后,就失去了原有特性,退化成一般指针,多了自增 ...
- C语言-数组名真的不是指针
文章目录 1 前言 2 关于一维数组 3 sizeof运算符和自增运算符 4 数组名也不是常量指针 5 总结 1 前言 参照我之前的两篇文章: 二维数组做函数的参数 动态创建二维数组 事实告诉我们,二 ...
- 数组名与数组指针的关系
一个奇怪的现象 #include<stdio.h>int main(void) {int arr[5] = { 1,2,3,4,5 };int(*p)[5] = &arr;prin ...
- 总结:数组名和指针完全是两码事
大家经常接触到诸如:"数组名可以当作指向数组首元素的指针用"."指针可以用数组下标方式进行访问"这些事实,所以数组和指针的概念经常被混淆,其实数组和指针是完全不 ...
- 从编译器角度分析C语言中数组名和指针的区别
从编译器角度分析C语言中数组名和指针的区别 数组名和指针是两个往往很容易让人们混淆的概念,很多人以为数组名就是一个指针,也有很多人知道数组名不同于指针但是仅知道数组名的值不能像指针一样改变. 例如你可 ...
- 类中数组成员变量怎么初始化,数组名与指针的区别
使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之. (std::vector<int>,构造函数接受const std::vector< ...
- 数组名和指针的区别和联系、数组名取地址a
前言 在很多用到数组名字的地方,编译器都会自动地将其替换为一个指向该数组首元素的指针. 所以,在大多数表达式中,使用数组名其实是在使用一个指向该数组首元素的指针. 数组名其实是种特殊的指针 int m ...
最新文章
- Cookie注入是怎样产生的
- xcode symbol(s) not found for architecture i386错误解决方法
- OpenGL中不可以有两个以上myDisplay函数,在主函数中生效的是最后调用的那个
- 《机器学习实战》chapter06 支持向量机
- 在非容器(集群)环境下运行dapr
- JMS中的消息通信模型
- 套接字(Windows)
- oracle的备份与恢复
- Darwin Streaming Server 安装流程
- 中兴服务器 raid,中兴LIS等直通阵列卡卡硬盘检测工具
- windows 控制台cmd乱码的解决办法
- 【利用编程来解决问题】——解数学题
- 史丰收速算 (蓝桥杯)
- ecshop支付宝H5插件,ecshop手机版个人支付宝插件,ecshop手机端个人支付宝插件【支付宝免签接口,免签约扫码支付,免申请无须手续费,支付宝支付即时到账】
- 【HCIE-BigData-Data Mining课程笔记(三)】预备知识-Python基础
- 推荐系统相关顶会整理
- linux下合并多个文件夹内容成为一个文件夹
- idea 撤销和前进快捷键
- 点击链接在新窗口打开新页面
- 跟我学Android之十一 列表和适配器
热门文章
- JAVA大学生活动中心场地管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
- 关于近视眼手术网友的评价
- audacity VS2010 工程搭建
- Linux 下进行服务器间网络测速
- month(字段)、year(字段)
- windows 使用Nemo踩坑记录,no model named “nemo”
- 让窗口一直在上面 (转)
- 1.4 Qt工具之Qt Linguist介绍
- NLP实战:面向中文电子病历的命名实体识别
- webpack错误之ERROR in mainModule not found: Error: Can‘t resolve ‘./src‘ in ‘C:\Users\tuchunrong\Progr