指针数组的问题

双指针解决数组问题 例题 Leetcode链接,合并两个有序数组 由于有m和n表示有效元素个数,所以题目给定的nums1Size和nums2Size没多大用处。 已知nums1的空间刚好将nums1的有效元素个数m和nums2的有效元素个数n放入, 要将nums2的数据放入nnums1中构成新的有序数组,由于两个数组是有序的,我们只需要通过两个指针分别比较大小,在通过另一个指针去改变数组nums1中的值,这实际就是多指针解决问题 那我们要从前开始比较,还是从后开始比较呢? 如果从前开始比较的话 ... 阅读详情

闲逛优快云的论坛

又学到了不少东西,下面贴出来 

--------------------------------------------

#include <stdio.h>
void main()
{
    char *a[3]={"Hello","Welcome","Goodbye"};
    for(int i=0;i<3;i++)
    {
        a++;
        printf("%s/n",*a);
    }
}
上段程序编译错误,问题是a是一个指针数组,在对a进行自加操作的时候报错,是因为不能对数组名进行自加操作。而下一段代码却能够通过编译并且程序能运行。
#include <stdio.h>
void main(int argv,char *argc[])
{
    while(argv>0)
    {
        argv--;
        printf("%s/n",*argc);
        argc++;
    }
}
我有疑问,argc也是一个指针数组啊,但是这里为什么能对argc数组名进行自加操作呢?盼求高手解答,谢谢!

---------------------------------------------

下面是大家的解答(筛选出我认为有参考价值的)

---------------------------------------------

char *a[3]={"Hello","Welcome","Goodbye"};

相当于const char *a[3]={"Hello","Welcome","Goodbye"};
定义在程序的常量区的,不是栈上的!

=======================================

main(int argv,char *argc[])里的char *argc[]这里的指针并没有指向字符串常量,只是普通的压栈参数而已!

=======================================

数组, 在作为参数后,
会退化为一个普通的指针 ...

可以这样:
#include <stdio.h>

void print(char *a[])   //这里退化为指针了 ...
{
    for(int i=0;i<3;i++)
    {
        a++;
        printf("%s/n",*a);
    }
} 

void main()
{
    char *a[3]={"Hello","Welcome","Goodbye"};
    print(a);  
}

你的第二个例子也是同样的道理 ...

====================================

1 数组名是个常量 代表数组首地址 不能改变 a++改变了
所以报错
2当数组作为函数参数 就是一个完完全全的指针 char *a[]等价于char **a 
====================================

--------------------------------------------
char *a[3]={"Hello","Welcome","Goodbye"};
--------------------------------------------
a实际上是一个指针常量,编译就可以确定的嘛.

--------------------------------------------
void main(int argv,char *argc[])
--------------------------------------------
函数的数组参数就不同了,无法知道数组有多大,而且用拷贝方式传递数组参数效率不行,只好把把argc处理成指针变量.
----------------------------------------------

 

#include <iostream>

using namespace std;

int main()
{
    char *a[]={"Hello","Welcome","Goodbye"};
 
    for(char **p = a;p != a + 3;++p)
    {
        cout << *p << endl;
    }
    system("pause");
    return 0;
}

char *a[] 是字符串数组,a是数组名,存放指向a[0]的地址,不可改变

**p是字符串指针,指向a,可改变

 

如果按照上面说得

#include <stdio.h>

void print(char *a[])   //这里退化为指针了 ...
{
    for(int i=0;i<3;i++)
    {
        a++;
        printf("%s/n",*a);
    }
} 

void main()
{
    char *a[3]={"Hello","Welcome","Goodbye"};
    print(a);  
}

此时*a[]作为形参,成为了一个字符串指针,跟**p有同样的作用,而跟原先的*a[]有了本质的不同

数组溢出与指针问题 错误一: Error connecting to the target: Error 0x00000220/-1156 Error during: Execution, OCS,  Lost processor clock. Device may be operating in a low-power mode.  Do you want to bring it out of this 阅读详情

相关推荐

树莓派4B+DroneKit实战:手把手教你用Python控制无人机飞行(附避坑指南)

本文提供了一份详尽的树莓派4B与DroneKit配置实战指南,涵盖从硬件选型、软件环境搭建到Python编程控制无人机的完整流程。文章重点解决了ARM架构下的兼容性问题、MAVLink通信配置及端口管理等常见难题,并附带了实用的避坑指南和代码示例,帮助开发者构建稳定可靠的无人机控制系统。

weixin_29056781的博客 410

C++数组指针不能自增1/自减1

我们知道指针可以自增1/自减1,如下面这个代码是没问题的 int *var; var++; 但如果var是指向数组的指针,那么var++是非法的,如下面例子 #include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 20...

Mr.horse的博客 1849

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK、FSK和PSK是三种基础数字调制技术。ASK通过改变载波振幅传输信息,实现简单但抗干扰弱;FSK利用频率变化传递信号,抗干扰较强但频谱利用率一般;PSK通过相位变化编码数据,抗干扰和频谱效率最优但同步要求高。三种技术各具特点,分别适用于不同通信场景:ASK用于低速光纤通信,FSK常见于无线广播,PSK则广泛应用于Wi-Fi、蓝牙等现代通信系统。

limengshi138392的博客 8727

C语言从零开始——指针数组和数组指针

####   指针和数组的区别   #### int main() { int a[5]; int *b; //定义完成之后,表达式*a是合法的,但是*b是非法的;*b会访问内存中的不确定位置,导致程序终止! //还有,b++可以通过编译,但是a++不可以(数组名不能作为左值) printf("a = %p \n",&a); // *b

fsx2550553488的博客 893

Visual Studio Installer下载失败的5种修复方法(含DNS修改/补丁安装)

本文针对Visual Studio Installer下载安装文件失败的问题,提供了从网络层到系统层的深度排查与修复指南。详细介绍了DNS修改、代理配置、防火墙设置、系统服务检查等5种核心修复方法,并包含离线安装与手动补丁等替代方案,帮助开发者彻底解决安装难题。

sprite的博客 1618

深入解析AndroidManifest.xml与device_admin.xml:打造完美DeviceOwner应用配置

本文深入解析了Android企业级开发中DeviceOwner应用的核心配置文件AndroidManifest.xml与device_admin.xml。详细阐述了如何精准声明DeviceAdminReceiver、定义管理策略,并提供了通过ADB命令进行设置与验证的实战指南,帮助开发者构建权限完整、配置正确的设备所有者应用。

ice55的博客 681

数组指针和指针数组

1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。 先来看一段代码: void main() { int a[2][2]={1,2,3,4};//这是一个2*2的二维数组 int (*p)[2];//数

Touch_2011的专栏 5万+

海思芯片OpenHarmony系统移植:Sensor传感器模块HDF驱动配置HCS文件详解

海思系列芯片的传感器模块通过HDF(Hardware Driver Foundation)驱动框架进行管理和配置。传感器HCS(HDF Configuration Source)配置文件定义了各类传感器的硬件参数、总线配置、寄存器序列等信息,为传感器驱动提供必要的初始化和运行参数。海思系列芯片适配OpenHarmony的传感器HDF配置HCS文件是传感器驱动开发的关键部分,通过合理配置可以实现各种传感器设备的驱动支持。

m0_67505153的博客 209

【c语言学习笔记】指针数组和数组指针以及在做题的时候遇到的问题

第一次笔记:题目是【找出方阵每列中的最小元素及其所在的行号】,实际上是我对指针数组和数组指针理解不透彻导致访问并交换了错误的内存地址。【指针数组】1.  定义 int *p[M] ,arry[M][N];2.  初始化//可以通过循环来给指针数组初始化 int i,j; for(i=0;i&lt;M;i++) { p[i]=arry[i]; }3.  含义指针数组,顾名思义,他是一个数组,...

K的博客 378

解锁Gemini+Google Sheets/Excel:数据分析自动化新姿势

本文介绍了如何将谷歌AI工具Gemini集成到Google Sheets和Excel中进行智能数据分析。主要内容包括:1) Gemini的功能特点,具备语言理解和生成能力;2) 在Google Sheets中的集成步骤,包括订阅Workspace、开启Gemini功能及使用方法;3) 通过第三方插件在Excel中使用Gemini的方法;4) 销售和财务数据分析的实际案例;5) 使用时的注意事项,包括数据安全、问题处理和常见错误解决。通过Gemini集成,用户可以实现高效的数据处理和智能分析,提升工作效率。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 573

基于Simulink的压缩空气储能(Compressed Air Energy Storage, CAES)

压缩空气储能(CAES)是一种将电能转化为压缩空气存储在高压容器中,然后在需要时释放空气驱动涡轮机发电的技术。它具有大规模、长寿命和环境友好的特点,在电力系统中用于削峰填谷、频率调节和备用电源等应用。本项目将详细介绍如何在MATLAB/Simulink中搭建一个完整的基于压缩空气储能的系统,并提供具体的代码实现和设计步骤。如果你需要实现更复杂的控制逻辑,可以使用MATLAB Function模块。以下是一个简单的例子,展示了如何在该模块中实现一个条件逻辑:Matlab深色版本Kp = 1;

MHD0815的博客 1274

数组中的碰撞指针与滑动数组问题

数组相关算法的解决方法,利用碰撞指针与滑动窗口的思想解决问题

yzl1293346757的博客 274

MTK(camera篇)Camera整体点亮

本文介绍了在MTK平台上添加新Camera Sensor的驱动开发流程。主要内容包括:1)MTK Camera采用HAL3架构,驱动层主要负责sensor电源控制和寄存器操作;2)详细说明了添加新sensor需要在多个文件中进行的修改,包括设备树配置、内核头文件、驱动列表、电源序列等;3)特别指出需要配置I2C地址表,并导入tuning文件和metadata文件以完善ISP处理流程。文章提供了完整的文件修改清单,涵盖了从内核层到HAL层的完整开发过程,为MTK平台Camera Sensor驱动开发提供了具体

weixin_49303682的博客 361

浅谈c/c++面试中的指针数组越界-野指针空指针-指针数组数组指针问题

文章目录指针的定义 指针的定义 指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。简单的说,电脑内存中的每一个字节都有一个编号,指针中存储的就是这个编号,可以找到唯一确定的一个内存单元 ...

李木子的博客 1643

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

数组双指针问题

本篇文章是在使用双指针的背景下,解决有关数组一系列的问题,使用java实现

weixin_44833447的博客 356

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数组-指针-遇到的问题汇总

#include<stdio.h> int main() { int a[4] = { 1,3,4,7 }; int(*p)[4]; p = &a; printf("%d\n", (*p)[3]); return 0; } //第五行代码 不能写成p=a;因为p=a,等价于p=&a[0];而指针是一个数组指针,不能将int整形赋给指针 char a[10] = {0,1,2,3,4,5,6,7,8,9}; char (*str)[10]; str

xu_lent的博客 361

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

char数组和指针问题

这个问题是C++基础问题中相当折腾人的一个,死记硬背解决不了根本问题,记住还是要忘,需要仔细研究其本质。 这两种方式就是数组和指针的方式: char a[6] = "abcde"; char *b = "abcde"; 第一行声明了并初始化了一个char数组,第二行是声明char指针b,指向了常量字符串。其中a是数组的首地址,a和b的地址一定不同。 千万不能说数组名是指针,可以用siz...

yao5hed的专栏 5615

指针与数组步长问题探究

@[TOC]目录 指针与数组步长问题探究 为何探究  不管是对于初学者还是对于码农而言,指针与数组都是一个难点,而研究指针与数组的步长问题有助于我们从根本上去理解和解决一些实际的问题。 探究一维数组与一级指针 #include <stdio.h> #include <stdlib.h> int main(void) { char *p; int *q; char a[10] = "abcd"; printf("p:%d\tp+1:%d\n",p,p+1

qq_45461953的博客 961

c++ 指针数组的赋值问题

指针数组的赋值问题

Zy_zxq的博客 456

用指针给数组赋值的一个小问题

问题是这样的, 我打算输入与元素为数组赋值, 然后反向输出数组元素# include int main(void) { int a[10], * p = a, i; for (i = 0; i < 10; i++) scanf("%d", p++); for(i = 9; i >= 0; i--) // 用指针输出时, i 仅仅用来控制

williamgavin的博客 1万+

算法 - 数组指针问题

leetCode 数组 双指针题 88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出:[1

weixin_44078610的博客 208

数组和指针的传参问题

数组和指针的传参问题 数组传参 一维数组传参 #include&lt;stdio.h&gt; void test(int arr[])//ok? { } void test(int arr[10])//ok? { } void test(int *arr)//ok? { } void test2(int *arr[20])//ok? { } void tes...

weixin_42617262的博客 1309

指针数组与数组指针的区别以及指针需要注意的问题

初学指针需要注意的细节问题

qiao代码的木偶人的博客 241

数组退化为指针问题

数组退化为指针问题 1、数组作为函数入参后,会退化为指针。 2、char a[100]数组被strlen(a)后,退化为指针。 3、在带数组型入参函数内对数组运算sizeof就不对了,因为被退化为了指针,因此传递的时候要加一个参数lenth。 int len, size; char a[100] = {0}; len = strlen(a); //len为0,strlen查找到第一个\0返回,a退化为指针 size = sizeof(a); //size为100,实际的内存占用100*1。a不退化。 cha

seaky的博客 1287
上一篇: 妈的个B,疯了
下一篇: 人世间最珍贵的是什么?
amonkun
博客等级 码龄20年 2粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值