//格式:变量类型 *变量名
//定义了一个指针变量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. Html-Css标签lable中定义宽度需要其他的支持

    lable的标签如果定义了width,如果要使起生效,则需要定义display width: 130px; display: inline-block;

  2. C#-面向对象的三大特性——继承

    继承 注意事项: 继承语法:   类名:父类名 父类也称之为 基类 ,子类也可以成为 xxx的派生类 或 超类. 父类可以有无限个子类,子类只能有一个父类(亲爹),可以有无限个接口(干爹) 子类并不是 ...

  3. 纯css控制-表格表头固定,内容多时滚动内容

    <html> <head> <style type="text/css"> * { margin: 0; padding: 0; } /*所有内 ...

  4. CA 证书

    1.ubuntu curl 命令报错(CA) kamil@vm-ubuntu:~$ curl https://szxyzs.vanke.com/DataCenter/datacenter/api cu ...

  5. Python中的GIL

    •start 线程准备就绪,等待CPU调度 •setName 为线程设置名称 •getName 获取线程名称 •setDaemon 设置为后台线程或前台线程(默认) 如果是后台线程,主线程执行过程中, ...

  6. JEECMS中返回列表跳转的几种方式

    1.返回的不是当前类 <span class="tools pull-right"> <button class="btn btn-info" ...

  7. BZOJ 1121: [POI2008]激光发射器SZK

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 792  Solved: 653[Submit][Sta ...

  8. 【caffe】无法找到gpu/mxGPUArray.h: No such file or directory

    @tags: caffe 问题出现在,windows下编译caffe的过程中.按照github.com/microsoft/caffe的readme配置的. 问题原因是,用的matlab版本较新(20 ...

  9. javaScript与MVC

    MVC,就是Module,View,Controller分离,使业务逻辑更加清晰,但是现在公司的项目中很多地方那个不是这样的,很多业务逻辑放在了javascript中实现,这样做的优点就是对于技术要求 ...

  10. bzoj3295: [Cqoi2011]动态逆序对(cdq分治)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...