//格式:变量类型 *变量名
//定义了一个指针变量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. spring-ant-处理zip

    因为java类型自带的不支持中文路径,不过两者使用的方式是一样的,只是apache压缩工具多了设置编码方式的接口,其他基本上是一样的.另外,如果使用org.apache.tools.zip.ZipOu ...

  2. Asp.net Mvc 使用EF6 code first 方式连接MySQL总结

    最近由于服务器变更为Linux系统.MsSql for Linux什么时候出来到生产环境使用还是要很长时间的.于是考虑使用Mysql数据库,ORM使用EF.于是先踩下坑顺便记录一下,有需要的tx可以参 ...

  3. 【BZOJ-1055】玩具取名 区间DP

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1560  Solved: 907[Submit][Statu ...

  4. 轻量级Web API实现,带接口界面的Jayrock JsonRPC接口组件升级版

    升级功能如下: 1.增加模块名称.输入参数.输出参数注释 2.增加Sign验证.输入数据解密.输出数据解密重写方法 3.增加集成Demo规范 4.增加模块分类.接口快速定位.接口调用说明.接口输入输出 ...

  5. JSP教程推荐

    从搭建环境到上手JSP再到Servlet. http://www.runoob.com/jsp/jsp-tutorial.html

  6. Discuz X1.5 X2.5 X3 UC_KEY Getshell Write PHPCODE into config/config_ucenter.php Via /api/uc.php Vul

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在Discuz中,uc_key是UC客户端与服务端通信的通信密钥.因此使用uc_k ...

  7. js调用刷新

    _self.fireEvent('refresh');

  8. ARPSpoofing教程(二) - 获取网络设备中的详细地址信息

    WinPcap中文API  http://www.ferrisxu.com/WinPcap/html/index.html 1: #include"pcap.h" 2: #incl ...

  9. POJ2185Milking Grid(最小覆盖子串 + 二维KMP)

    题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/686 ...

  10. JS-Array数组对象

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>A ...