【黑马程序员】C语言学习笔记之指针(十一)

黑马程序员——C语言基础教程笔记 黑马程序员——C语言基础教程笔记 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录黑马程序员——C语言基础教程笔记前言Day-11.C语言概论1.1 什么是C语言1.1.1 C语言特点1.1.2 学习C语言的理由1.1.3 发展方向1.1.4 C语言中的关键字2.3.Day-21.引入库2.读入数据总结 前言 研三了,作为一枚菜鸡硕,为了找工作,只好重刷C语言。以下笔记是我在“黑马程序员:http://yun. 阅读详情

--------------------------------------------IOS期待与您交流!--------------------------------------------

一、什么是指针?

指针是用 来存放变量地址的。通过指针可以 间接操纵变量

二、指针的定义

变量类型 *变量名;
如:int *p;定义了一个int类型的指针p。
注意:任何类型的指针都占据8个字节的存储空间

三、指针的初始化

1、先定义,后初始化
    int a = 10; // 定义变量a
    int *p;     // 定义int型指针p
    p = &a;     // 给指针p赋值,存放的是变量a的存储地址
2、定义的同时初始化
    int a = 10;      // 定义变量a
    int *p = &a;     // 定义int型指针p,同时给指针p赋值,存放的是变量a的存储地址

四、指针的使用

1、取出指向变量的值
    int a = 10;      
    int *p = &a;     
    int value = *p;   // 访问指针p所指向的变量a的值,并赋值个value,value = 10;
2、给指针指向的变量赋值
    int a = 10;      
    int *p = &a;     
    *p = 20;         // 指针p所指向的变量的值被改成20,也就是a的值被改成20
* 的含义:
int *p = &a 中的 * 用来说明 p 是一个指针类型的变量,和变量类型是一个整体。
*p 中得 * 用来访问 p 所指向的变量a
3、使用注意
在指针指向变量之前,不要对其所指的内容赋值。因为此时指针指向的地址不确定。如下是错误的:
    int *p;     
    *p = 10; 

五、指针与数组

1、数组名就是数组的地址,也是数组首元素的地址,既然是地址,也就可以赋值给指针变量。
    int values[5] = {10, 9, 8, 67, 56};
    int *p = values;
    int *p2 = &values[0];
    
    printf("%p\n", p);
    printf("%p\n", p2);
输出:

0x7fff549f2c60

0x7fff549f2c60

2、利用指针来访问数组元素
    int values[5] = {10, 9, 8, 67, 56};
    int *p = values;
    // 数组方式
    for (int i = 0; i < sizeof(values) / sizeof(int); i++) {
        printf("values[%d] = %d\t", i, values[i]);
    }

    printf("\n");
    
    // 数组访问方式1
    for (int i = 0; i < sizeof(values) / sizeof(int); i++) {
        printf("values[%d] = %d\t", i, p[i]);
    }

    printf("\n");
    // 数组访问方式2
    for (int i = 0; i < sizeof(values) / sizeof(int); i++) {
        printf("values[%d] = %d\t", i, *(p + i));
    }
输出:

values[0] = 10values[1] = 9values[2] = 8values[3] = 67values[4] = 56

values[0] = 10values[1] = 9values[2] = 8values[3] = 67values[4] = 56

values[0] = 10values[1] = 9values[2] = 8values[3] = 67values[4] = 56

注意:
*(p + 1);表示把指针指向的地址移到下一个该变量类型的地址
同理,*(p + i);表示在p指向的地址的基础上,把指针指向的地址移到第 i 个该变量类型的地址
3、数组作为参数传递给函数的本质是把数组的地址传递给函数。
void test(int v[])
{
    printf("大小:%lu\n", sizeof(v));
    printf("地址:%p\n", v);
}

int main()
{
    int values[5] = {10, 9, 8, 67, 56};
    printf("大小:%lu\n", sizeof(values));
    printf("地址:%p\n", values);
    
    test(values);

    return 0;
}
输出:

大小:20

地址:0x7fff55dc6c60

大小:8

地址:0x7fff55dc6c60

六、指针与字符串

字符串的本质是字符数组,所以字符串的名字也就是第一个字符的地址,也是字符串的地址。
之前定义字符串的方式是:
    char name[] = "itcast";
有了指针后,可以:
    char *name = "itcast";
区别:
字符数组方式:

  * 特点:字符串里面的字符是可以修改的

  * 使用场合:字符串的内容需要经常修改

指针方式:

  * 特点:字符串其实是一个常量字符串,里面的字符是不能修改

  * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用

七、清空指针

假设p是任意的指针。清空指针的值方式如下:
    p = 0;    
    p = NULL;

八、为什么int类型的指针只能指向int类型的变量

先看下面的程序:
    int i = 2;
    char c = 1;
    // int类型的指针指向char类型的变量
    int *p = &c;
    printf("%d", *p);
输出结果:

513

内存分析:

由于p是int类型的指针,指向的地址是 ffc1,于是就从 ffc1 取出四个字节的内容来:0000 0000 0000 0000 0000 0010 0000 0001,换算成十进制就是513,这就是int类型的指针为什么不能指向char类型的变量的原因。
总结:同种类型的指针只能指向同种类型的变量

九、函数和指针

1、返回指针的函数
数据类型 *函数名(参数列表)
{
// ...
}
如:
char *pChar()
{
    return "hello";
}
2、指向函数的指针
数据类型 (*pointName)(参数列表);
如:
void test()
{
    printf("调用了test函数\n");
}

int sum(int a, int b)
{
    return a + b;
}

int main()
{
    int (*p)(int, int); // 定义
    p = sum;            // 初始化
    int c = p(10, 11);  // 调用函数,相当于sum(10, 11);
    printf("c is %d\n", c);
    
    void (*p2)() = test; // 定义的同时初始化
    p2();               // 调用函数
    
    return 0;
}






--------------------------------------------IOS期待与您交流!--------------------------------------------

详细请查看:http://edu.csdn.net

游戏数据训练世界模:AI物理规律学习与仿真应用实践 世界模作为理解现实世界动态的AI工具,通过多模态数据学习物理空间属性来预测未来状态。其核心原理在于从环境交互中提取物理规律,技术价值体现在能够安全、低成本地训练AI系统应对复杂场景。在应用层面,游戏数据因其结构化环境内置物理引擎,成为世界模训练的优质素材。游戏世界中的物体交互、运动轨迹等数据天然包含现实物理规律,特别适合训练物理AI。本文以General Intuition公司获得3.2亿美元融资为切入点,深入探讨游戏数据在世界模训练中的技术实现路径,涵盖数据提取管道构建、多模态数据融合方法,以及 阅读详情

相关推荐

Unity UGUI深度优化

Unity UGUI优化相关

不定时分享所学所得,包括游戏开发和其他收获! 2689

11.1指针删除

#include<stdio.h> void delcharfun(char *str,char ch); int main() { char ch,str[110]; scanf("%s",str); getchar(); scanf("%c",&ch); delcharfun(str,ch); printf("%s\n",str); return 0; } v

qq_52606374的博客 471

CloudCompare 点云工具安装包:CloudCompare-v2.13.1-setup-x64.exe

CloudCompare 点云工具安装包:CloudCompare-v2.13.1-setup-x64.exe

C++用delete删除指针指向的堆中空间

用delete删除指针指向的堆中空间 用new关键字创建的内存空间不会被系统自动释放, 因此 1.假如你不去释放,那么该区域的内存始终不能被其他数据所使用。 2.指向该内存的指针是个局部变量,当定义指针的函数结束返回时,指针也就消失了,那么就再也找不到该块的内存区域。 假如指向该内存区域的指针自动消失了,计算机就再也找不到该区域的内存了,就好像丢了这块内存一样,这 种情况称为“内存

快乐学习code 5701

指针的删除

1.在链表中,将某个指针delete ,指向该指针的那个指针的next 不会自动赋值为NULL 需要手动赋值。 2.删掉 某指针所指向的内存,该指针仍然可以使用。 下面是一个带头指针的单向链表 void Stack::Pop(int &value){ if(ndepth<=0){ cout<<"the stack is empty"<<endl; return;

3190

C++中关于链表指针的清除(qt中QVector/QMap的清除)

C++

Littlehero_121的博客 1964

如何清理指针数组

在这个示例代码中,MyClass 是一个自定义的类,您需要根据您的实际情况将其替换为您需要的类名。请注意,当您使用 delete 操作符来删除一个指针时,您必须将指针设置为 nullptr,以避免悬挂指针的情况。如果您想要清理一个指针数组,您可以遍历数组中的所有指针,使用 delete 操作符来删除每个指针,然后将指针数组设置为 nullptr。

weixin_39252106的博客 1655

黑马程序员C语言入门笔记

黑马程序员C语言入门笔记》 去发现同类优质开源项目:https://gitcode.com/ 《黑马程序员C语言入门笔记》是一份专为C语言初学者准备的全面笔记资料。它深入浅出地讲解了C语言的基础知识,帮助初学者系统地掌握C语言的编程技巧。 此笔记资料针对所有初学C语言的人员,无论您是编程小白,还是已有一定基础的朋友,都能从中受益。对于那些有编程基础的朋友来说,这份笔记是一个宝贵的助手,可以帮助您...

gitblog_06703的博客 550

黑马程序员_C语言学习笔记指针基础

1.指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 2 指针的类。   先列出一些指针的类,简单的认识一下 (1)int *ptr; //指针的类int * (2)char *ptr; //指针的类是char * (3)int **ptr; //指针的类int ** (4)int (*ptr)[3]; //指针的类是 in

MR____Wang的专栏 591

黑马程序员C语言基础(第六天)指针

https://www.bilibili.com/video/BV1jW411K7v2/?p=70&spm_id_from=pageDriver 文章目录指针概述内存物理存储器存储地址空间内存地址指针指针变量指针基础知识指针变量的定义使用通过指针间接修改变量的值指针大小野指针指针(wild pointer & null pointer)万能指针void *const修饰的指针变量指针数组数组指针法操作数组元素指针加减运算1)加法运算2)减法运算指针数组多级指针指针函数函数形参

Dontla的博客 2391

黑马程序员】C语言学习笔记(2) - 指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------     指针是C语言提供的一种数据结构,其功能与一般的数据类不一样的地方就在于它存储的是变量的内存地址。我对指针的概念理解如下图所示: 对应上图我们可以使用如下的代码来解释: #include int main() { int a = 11; int *p =

Little__Coder的博客 660

【C++】黑马程序员-C++基础语法学习笔记

根据黑马程序员C++课程内容,结合讲义,将自己学习C++的过程中将自己觉得有必要记下的笔记进行整理,方便复习回顾,编程环境为VSCode。编写代码: 运行程序:作用: 在代码中加一些说明解释,方便自己或其他程序员程序员阅读代码两种格式通常放在一行代码的上方,或者一条语句的末尾,对该行代码说明 多行注释: /* 描述信息 */ 通常放在一段代码的上方,对该段代码做整体说明 多行注释快捷键: ①注释/取消:Ctrl+Shift+/ ②注释:Ctrl+K+C ③取消注释:Ctrl+K+U作用:给一段指定的内

qq_62361050的博客 1771

黑马程序员--从入门到精通,C语言学习路线书籍推荐

C语言是一种通用的、面向过程式的编程语言,广泛用于系统与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。很多朋友刚开始接触C语言大多数可能是谭老师的

Angle1ove的专栏 3125

黑马程序员——C语言学习笔记05 指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、指针变量只能存储地址。指针就一个作用,能够根据地址值访问对应的存储空间。 2、定义指针 int *p; 3、给指针赋值 p =&num; 4、访问修改指针变量p指向的存储空间*p = 1;   5、不同类指针变量所占内存空间的大小都是8个字节。   6、当

gjgoodjob271的博客 447

黑马程序员匠心之作 || C++基础编程笔记

所谓数组,就是一个集合,里面存放了相同类的数据元素特点1:数组中的每个数据元素都是相同的数据类特点2:数组是由连续的内存位置组成的数据类 数组名[ 数组长度 ];数据类 数组名[ 数组长度 ] = { 值1,值2 ...};数据类 数组名[ ] = { 值1,值2 ...};示例int main()//定义方式1//数据类 数组名[元素个数];//利用下标赋值//利用下标输出//第二种定义方式//数据类 数组名[元素个数] = {值1,值2 ,值3 ...}

强哥的微博 3239

黑马程序员—C语言笔记指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

lan_wen963的专栏 737

C语言学习之路(黑马)

C语言学习之路---师承黑马

理想主义的花终将盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 1447

黑马程序员————C语言指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1,指针简介     指针是C语言中非常重要的一种数据类。学习指针是学习C语言中最重要的一环,能否正确理解使用指针是我们是否掌握C语言的一个标志。 2,指针定义     对指针变量的定义包括三个内容: (1)指针说明,即定义变量为一个指针变量; (2)指针变量名;

bluedevils99的专栏 784

黑马程序员——C语言指针

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

zya7016322的专栏 628

黑马程序员-C语言指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 0.指针概念 指针分类:    (1)强指针:默认情况下,都是强指针(__strong)    (2)弱指针: __weak 修饰                     eg: __weak Person *p2 = p ; (p2就是个弱指针

wlwl363的专栏 607

黑马程序员——C语言笔记指针

------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ---------- 指针 概念:内存单元的编号也叫做地址。根据内存单元的编号或地址可以找到所需的内存单元,所以通常把这个地址称之为指针。 生活中实例:银行账号是指针,卡里的钱是实际内容。 使用指针的好处: 为函数提供修改及调用变量的灵活手段让函数有多个返回值改善某些子程序的效率(传递

林涵的博客 544
上一篇: 【黑马程序员】C语言学习笔记之字符串(十)
下一篇: 【黑马程序员】C语言学习笔记之结构体(十二)
lixiangzhou
博客等级 码龄16年 45粉丝 87原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值