C语言基础08
1.指针和指针变量
指针变量:是保存变量地址的变量,存放只有地址;
指针:是变量的地址,存放的可以是3,4.5,YES;
普通变量与指针变量什么不同呢?
普通变量只能存取我们常常看到的类型数据,指针变量只能存取地址数据,其他数据不行,指针变量还可以对指向的内存空间进行存取操作,比如说sizeof();
int num = 25;
//创建整形指针变量 , int * 表示指针的类型, N 是指针变量名称, *N挨着一起是书写规范, &num就是存放num内存地址.
int *N = #
int *N =NULL //表示指针名N 的值为0
printf("%p\n",N); //0X7ff5fbf734 或者指针N的地址,就相当是N的指针
printf("%p\n",num); //0x19 %p就是内存地址的占位符.
printf("%p\n",*N); // 0x19 或者指针N指向值的地址. 注意这三者的区别.
实际上输出第一个和第二个的内存地址不想同.如果在PHP中2个变量名同时指向同一块内存区间,则地址一定相同.
*通过指针获取内存值.
*N = 45; // *N就是获取指针N的内存值,并修改它.
printf("%d\n", num); //45 上面已经修改了.
例如:
无返回值函数实现2个数相加减,本来是需要返回加减后的结果.
void Operat(int a , int b,int *sum , int *sub );
void Operat(int a , int b , int *sum , int *sub){
*sum =a + b; //*sum就是获取变量地址sum的值.
*sub = a - b;
}
main函数中:
int num1 =23,int num2 = 78;
int sum,sub =0 ;
Operat(num1,num2,&sum,&sub);
printf("%d\n",sub);
2.指针与数组之间的关联
C语言规定数组名代表数组中首元素(序号为0的元素)的地址: a = arr
int arr[] ={23,56,82,90,15};
int *a =arr; // 注意这里没有取地址符号&,因为数组名arr赋值就是将数组首地址传给指针a
printf("%d\n",arr); //首地址首下标 23 数组名代表数组首地址首元素.
printf("%d\n",a); // 23
printf("%d\n",&arr[0]); //取23的内存地址 3个都是相同的.
如果指针变量a已经指向数组中得一个元素,则a+1 是指向同一个数组的下一个元素,不是将a的值(地址)加1:
printf("%d\n",*(a+1)); //56 这里的+1不是23+1 而是根据指针的类型 向下移动4个内存空间,指针刚好指向56.
printf("%d\n",*(a) +1); // 23 +1 =24
*(a + 3) = 39; //将 90的值进行修改.
printf("%的\n", *(a + 3)); //输出39
看起来指针很数组很相似,但是数组其实跟指针有很大的区别:
a.数组在内存空间的大小= 元素个数 * 元素数据类型 例如一个5个int类型的数组, 需要在内存中占用20字节,而指针在内存中占用空间是根据操作系统,一般来说64位的mac系统指针占用字节8个.
b.数组名是常量地址,不能赋值,但是指针可以重定向(也就是赋值).
int arr[] ={45,29,87,10,59,31};
int *a = arr;
int brr[] ={0};
int *b = brr;
brr = arr; // 报错 数组不能相互间赋值.
b = a ; // 指针可以相互赋值.
printf("%d\n",*(b+1));
c.指针不能计算整形数组的长度,但可以计算字符数组的长度,因为字符数组又\0结束符,可以作为一个结束条件.
int str[] = "living my home";
int *s = str;
int lenght = 0;
while(* (s + lenght) != '\0'){
lenght++; //字符数组长度
}
d.整形数据类型于指针类型不一致怎么办??
.指针与字符数组的关联
char str[] = "imaging all the people ";
char *s3 = str;
printf("%s\n",str);
printf("%s\n",s3); //直接s1指针打印输出字符串
printf("%c\n", *(s3+1)); //m(与整形数组相同)
printf("%s", s3+2); //aging all the people
//指针数组 里面包含字符串,和常量字符串
char *str[] ={"IOS","PHP","JAVA","78"};
//输出某个字符串 或者某个字符.
printf("%s\n",*(str+1)); //PHP
*(str +1 ) = "OC"; //修改.
*(str +3 ) = "myname";
最后注意一点,我们有时候会比较懒,写成这样:
char *na = "luoshuailuo"; //直接使用指向字符串的表达方式,字符串是只读的
strcat (*na,"@163.com"); //只读的 不能在后面添加什么东西.
printf("%c",*na);
我们定义字符指针数组又有2种方式:
1.char *array[] ={"IOS","PHP","Andior","JAVA","C#"};
2.char arr[6][100] ={"IOS","PHP","Andior","JAVA","C#"};
char *s1[6] = {};
for(int i = 0 ;i < 6; i++){
s1[i] = arr[i]
}
C语言基础08的更多相关文章
- Java入门 - 语言基础 - 08.运算符
原文地址:http://www.work100.net/training/java-operator.html 更多教程:光束云 - 免费课程 运算符 序号 文内章节 视频 1 概述 2 算术运算符 ...
- [08 Go语言基础-for循环]
[08 Go语言基础-for循环] 循环 循环语句是用来重复执行某一段代码. for 是 Go 语言唯一的循环语句.Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环 ...
- JavaScript基础---语言基础(1)
写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...
- 01_C语言基础
内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...
- Go语言基础之time包
Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- D14——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...
- D05——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...
- D04——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D04 20180810内容纲要: 1 内置函数 2 装饰器 3 生成器 4 迭代器 5 软件目录结构规范 6 小结 1 内置函数 内置函数方法详 ...
随机推荐
- [C++程序设计]全局,局部变量
在函数声明中出现的参数名,其作用范围只在 本行的括号内.实际上,编译系统对函数声明中的 变量名是忽略的,即使在调用函数时也没有为它们 分配存储单元.例如 int max(int a,int b); ┆ ...
- Mysql 配置慢查询日志(SlowQueryLog)以及使用日志分析工具
[ 查看系统关于慢查询的设置 ] mysql> show variables like '%slow%'; +---------------------------+-------------- ...
- Ultra-QuickSort(树状数组+离散化)
Ultra-QuickSort POJ 2299 Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 50495 Accep ...
- wordpress教程之函数讲解
wordpress函数收集 is_home() : 是否为主页is_single() : 是否为内容页(Post), 是否是单篇文章 is_page() : 是否为内容页(Page), 是否 ...
- 基于stm32f103zet6的FAT16文件系统学习0(读SD卡扇区)
SD卡已经看了两天了,主要是因为测试出来的卡容量不对,所以一直找原因,最终还是发现了,总比不过是单位上面出现了问题,或许是之前没有接触到SD的缘故吧,所以对其中的一些寄存器很不了解,一切都是重新开始, ...
- 利用SQL Profiler处理开销较大的查询
当SQL Server的性能变差时,最可能发生的是以下两件事: 首先,某些查询产生了系统资源上很大的压力.这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询. 另外,开销较大的查询 ...
- C# GC 垃圾回收
一.托管 .Net所指的托管资源到底是什么意思呢?是相对于所有资源,还是只限于某一方面的资源?很多人对此不是很了解. 其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的元素:因此对于Str ...
- css案例学习之通过relative与absolute实现带说明信息的菜单
效果如下 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- C语言的本质(31)——C语言与汇编之函数调用的本质
我们一段代码来研究函数调用的过程.首先我们写一段简单的小程序: int sum(int c, int d) { inte = c + d; returne; } int func(int a, int ...
- Eclipse配置Maven开发环境
前言: 现在Eclipse版本越来越高.高版本的Eclipse甚至已经集成了Maven像是SpringSource的哪个版本.用习惯了Eclipse.在开发中还是不想更换掉自己的IDE.如此一来就又了 ...