一个礼拜学习指针的总结: 变量和二维数组

这个礼拜学习的是指针的东西,指针其实还是蛮难的,现在掌握的不是很好。

在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

设有字符变量c,其内容为 'K'(ASCII码为十进制数 75),c占用了0X11A号内存单元(地址通常用十六进数表示)。设有指针变量p,内容为 0X11A,这种情况我们称为p指向变量c,或说p是指向变量c的指针。


 
严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。

变量:变量的指针就是变量的地址。存放变量地址的变量是指针变量。即在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个变量的地址或称为某变量的指针。为了表示指针变量和它所指向的变量之间的关系,在程序中用*符号表示“指向”,例如,i_pointer代表指针变量,而*i_pointer是i_pointer所指向的变量。因此,下面两个语句作用相同:
i=3;
*i_pointer=3;
第2个语句的含义是将3赋给指针变量i_pointer所指向的变量。
定义指针变量的一般形式为:
类型说明符 *变量名;
其中,*表示这是一个指针变量,变量名是一个合法的标识符,类型说明符表示该指针变量所指向的变量的数据类型。例如:
int *p1;
表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。再如:
int *p2;  //p2是指向整型变量的指针变量
float *p3;  //p3是指向浮点变量的指针变量
char *p4;  //p4是指向字符变量的指针变量
应该注意的是,一个指针变量只能指向同类型的变量,如 p3 只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。


然后是二维数组,现在定义一个二维数组    int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};    a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于0,a+1代表第一行的首地址,等于4,a[0]是第一个一维数组的数组名和首地址,因此也为0。*(a+0)或*a是与 a[0] 等效的, 它表示一维数组a[0]中第 0 个元素的首地址,也为0。&a[0][0]是二维数组a的0行0列元素首地址,同样是0,因此,a、a[0]、*(a+0)、*a、&a[0][0]是相等的。
同理,a+1是二维数组1行的首地址,等于,4,a[1]是第二个一维数组的数组名和首地址,因此也为,4。&a[1][0]是二维数组a的1行0列元素地址,也是4,因此a+1、a[1]、*(a+1)、&a[1][0]是等同的。另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的第1个元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。由a[i]=*(a+i)得a[i]+j=*(a+i)+j。由于*(a+i)+j是二维数组a的i行j列元素的首地址,所以,该元素的值等于*(*(a+i)+j)。
指针的定  义  含  义
int i;   定义整型变量 i。
int *p; p为指向整型数据的指针变量。
int a[n]; 定义整型数组a,它有n个元素。
int *p[n]; 定义指针数组p,它由n个指向整型数据的指针元素组成。
int (*p)[n]; p为指向含n个元素的一维数组的指针变量。
int f(); f 为一个返回整型的函数。
int *p(); p为一个返回指针的函数,该指针指向整型数据。
int (*p)(); p为指向函数的指针,该函数返回一个整型值。
int **p; p是一个指针变量,它又指向另外一个指针变量,该指针变量指向整型数据。


指针变量赋值:将一个变量的地址赋给一个指针变量。
p=&a;  //将变量a的地址赋给p
p=array;  //将数组array的首地址赋给p
p=&array[i];  //将数组array第i个元素的地址赋给p
p=max;  //max为已定义的函数,将max的入口地址赋给p
p1=p2;  //p1和p2都是指针变量,将p2的值赋给p1
注意,不能将一个数值直接赋给指针变量,例如p=1000;是没有意义的,一般会引起程序崩溃。



定  义 含  义
int i;定义整型变量 i。
int *p;p为指向整型数据的指针变量。
int a[n];定义整型数组a,它有n个元素。
int *p[n];定义指针数组p,它由n个指向整型数据的指针元素组成。
int (*p)[n];p为指向含n个元素的一维数组的指针变量。
int f();f 为一个返回整型的函数。
int *p();p为一个返回指针的函数,该指针指向整型数据。
int (*p)();p为指向函数的指针,该函数返回一个整型值。
int **p;p是一个指针变量,它又指向另外一个指针变量,该指针变量指向整型数据。

深度学习是机器学习一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值