//格式:变量类型 *变量名
//定义了一个指针变量p
//指针变量只能存储地址
//指针就一个作用:能够根据一个地址值,访问对应的存储空间
//指针变量p前面的int;指针变量p只能指向int类型的数据
int *p;

int a = 90;

//指针变量p指向了变量a
p = &a;

*p = 10;

a = 20;

printf("%d\n", *p);
//printf("%d\n", a);

return 0;

//利用指针修改
int main()
{
    int a = 90;

change(&a);

prinf ("%d\n", a);
    
    return 0;
}
void change(int *n)//int *n = &a;
{
    *n = 10;//将10赋给地址&a
}

格式: 变量类型  *变量名

定义一个指针变量p

int *p;

int a = 90;//分配存储空间给a

p里面只能存地址

p = &a;//指针变量p指向了变量a

以上三行代码在内存中

通过指针改变a 的值

*p = 10;

定义变量时的*仅仅是一个象征,没有其他特殊含义

利用指针求两个数的和与差

#include <stdio.h>

int main()
{
int a = ;
int b = ; int sum;
int min; sum = sumAndMinus(a, b, &cha); printf ("和是%d, 差是%d\n", he, cha);
return ;
} int sumAndMinus(int n1, int n2, int *n3)
{
*n3 = n1 - n2; return n1 + n2;//指针作用:使函数返回值可以有多个
}

任何指针都占用8个字节的存储空间

 #include <stdio.h>

 int main()
{
// 0000 0000 0000 0000 0000 0000 0000 0010
int i = ;
// 0000 0001
char c = ; int *p;
p = &c; printf("c的值是%d\n", *p); return ;
}
/*输出:
c的值是513
*/
//使用 int *p 不是 1 而是 513
//原因:int *p 取值赋值时 取赋4个字节内容
// 而 char *p 取值赋值时 取赋一个字节内容
//所以 指针都为8个字节存储空间,却定义指针类型的原因是,取值赋值相对应的类型的存储空间

 *p地址为(从大到小)0000 0000 0000 0000 0000 0010 0000 0001        int值为513

指针与数组:

 #include <stdio.h>

 int main()
{
int ages[] = {, , , , };
int *p; p = &ages[];//指针变量p指向了数组的首元素
//数组名就是数组的地址,也是数组首元素的地址
//p = ages;
//p + 1 的地址取决于指针p的类型 p为int p + 1 地址则增加 4
/*所以:
p + 1 -> &ages[1]
p + 2 -> &ages[2]
p + i -> &ages[i]
*/
/*
用指针 遍历数组:
for (int i = 0; i<5; i++)
{
printf("ages[%d] = %d\n", i, *(p+i));
}
*/
return ;
}
#include <stdio.h>

void change(int array[]);
int main()
{
int ages[] = {, , , , }; change(&ages[]); return ;
} void change(int *array)
{
printf("%d\n", array[]);
} //输出结果: 67

指针与字符串:

定义字符串的两种方式 1》利用数组

            char *name = "it";//字符串里面的字符是可以修改的

           2》利用指针

            char *name = "it";//字符串其实是常量字符串,字符不能改

             适用场合: 不需要修改且经常用到

1,常量区

2, 堆

    对象

3, 栈

    存放局部变量

使用char name[] = "it";为字符创变量

   char *name = "it";为字符串常量//不能改变值

返回指针的函数

 #include <stdio.h>

 char *test();

 int main()
{
char *name = test();//将函数的返回值赋值给指针 printf("name=%s\n", name); return ;
} char *test()
{
return "rose";
}

指向指针的函数:

  

 #include <stdio.h>

 void test()
{
printf("调用了test函数\n")
} int main()
{ /*
(*p)是固定写法,代表指针变量p将来肯定是指向函数
左边void :指针变量p指向的函数没有返回值
右边():指针变量p指向的函数没有形参
*/
void (*p)(); p = test;//指针变量p指向了test函数 (*p)();//利用指针变量简介调用函数 test();//直接调用函数
p();//简洁写法 }

C-指针的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  3. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  4. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  5. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

  6. Marshal.Copy将指针拷贝给数组

    lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...

  7. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. 智能指针shared_ptr的用法

    为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...

  10. 智能指针unique_ptr的用法

    unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...

随机推荐

  1. js-设置焦点

    function CheckForm() { if(document.form1.trainingName.value==""){ alert("培训班名称不能为空!&q ...

  2. 一个千万量级的APP使用的一些第三方库

    转载:http://www.jianshu.com/p/dc8c05cf693d .背景 前段时间在调研第三方推送服务的时候,反编译了一部分市面上比较流行的APP.其中一个无论是在设计还是功能上都堪称 ...

  3. 【BZOJ-2286】消耗战 虚树 + 树形DP

    2286: [Sdoi2011消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2120  Solved: 752[Submit][Status] ...

  4. 【bzoj3624】Apio2008—免费道路

    http://www.lydsy.com/JudgeOnline/problem.php?id=3624 (题目链接) 题意 给出一张无向图,其中有0类边和1类边.问能否构成正好有K条0类边的生成树, ...

  5. poj2187 旋转卡(qia)壳(ke)

    题意:求凸包的直径 关于对踵点对.旋转卡壳算法的介绍可以参考这里: http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.html http ...

  6. fork子进程僵尸问题及解决方案

    额,原来用 c 写 cgi 的时候用过 fork .那时候 cgi 的生命很短,所以遇到的问题压根没出现过.这次也是更加深入的对 fork 机制进行了一下了解. 参考这里的文档:http://ju.o ...

  7. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  8. [iOS 主要框架的总结]

    原文地址:http://blog.csdn.net/GooHong/article/details/28911301 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件, ...

  9. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 3 One-sample and two-sample tests

    Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  10. MOOCULUS微积分-2: 数列与级数学习笔记 2. Series

    此课程(MOOCULUS-2 "Sequences and Series")由Ohio State University于2014年在Coursera平台讲授. PDF格式教材下载 ...