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的更多相关文章

  1. Java入门 - 语言基础 - 08.运算符

    原文地址:http://www.work100.net/training/java-operator.html 更多教程:光束云 - 免费课程 运算符 序号 文内章节 视频 1 概述 2 算术运算符 ...

  2. [08 Go语言基础-for循环]

    [08 Go语言基础-for循环] 循环 循环语句是用来重复执行某一段代码. for 是 Go 语言唯一的循环语句.Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环 ...

  3. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  4. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...

  5. Go语言基础之time包

    Go语言基础之time包 时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法. Go语言中导入包 Go语言中使用import关键字导入包,包的名字使用双引号(”)包裹 ...

  6. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  7. D14——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...

  8. D05——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D05 20180815内容纲要: 1 模块 2 包 3 import的本质 4 内置模块详解 (1)time&datetime (2)datetime ...

  9. D04——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D04         20180810内容纲要: 1 内置函数 2 装饰器 3 生成器 4 迭代器 5 软件目录结构规范 6 小结 1 内置函数 内置函数方法详 ...

随机推荐

  1. 对于C++中const & T operator= 的一点思考

    一个正常的assignment操作符的声明是这样的. const elmentType & elmentType::operator=(const elmentType &rhs) 这 ...

  2. 认识IL代码---从开始到现在 <第二篇>

    ·IL代码分析方法 ·IL命令解析 ·.NET学习方法论 1.引言 自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力.俱往昔,我发现很多的园友都把目 ...

  3. Android之自定义checkbox样式

    大部分情况下,我们在UI中并不采用Android自带的checkbox复选框样式,这时候就需要我们自定义自己的checkbox. 首先找两张checkbox背景图片,比如下图样子的: 然后在drawa ...

  4. Android 圆形按钮实现

    项目中用到的圆形按钮,做个半天,用sharp形式实现,样式代码如下: <Button android:id="@+id/btn_5" android:layout_width ...

  5. C语言随笔_return答疑

    1. 例子,看实例2-2.这道题有同学会问,那个return有什么用?这么讲吧,return是个英文单词,中文意思是“返回”,用在程序里也是返回的意思,返回啥呢?返回一个值.在func函数中,retu ...

  6. Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/

    Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/

  7. UVA 11045-My T-shirt suits me(二分图匹配)

    题意:有N件T恤,N是6的倍数,因为有6种型号,每种件数相同,有M个人,每个人有两种型号的T恤适合他,每个人可以挑其中的一种,问能否所有的人都能分配到T恤. 解析:典型的二分图匹配,每N/6为同种T恤 ...

  8. VBA:Google翻译(含tk算法)

    完整的tk算法: //源自http://translate.google.cn/ TKK=eval('((function(){var a\x3d618632403;var b\x3d14854840 ...

  9. Android移植busybox

    Android 的toolbox没有自动补齐,命令少,对于开发人员还是需要busybox,直接移植官方的busybox会有很多问题,主要是因为基于Android的交叉编译工具并没有采用glibc作为C ...

  10. sql语句收集

    一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...