精华内容
下载资源
问答
  • 对数组元素取地址
    2019-05-15 23:07:51

    1、数组名是什么?
    1、数组名是一个符号地址常量,是数组的起始地址。

    2、对数组名取地址获得的值和对数组第一个元素取地址获得的地址值是否一样?
    2、值是一样的。

    3、上面第二问中。两种方式取得的地址的类型是否一样?
    3、不一样,对数组名取地址,取得的是整个数组的地址首地址,相当于数组指针。
    对数组第一个元素取地址获得的地址就是第一个元素的地址,相当于整型指针。

    更多相关内容
  • C语言 对数组取地址

    千次阅读 2021-05-22 18:54:14
    作者 : 卿笃军你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样的结果呢?演示样例:int a[5] = {1,2,3,4,5};int *p = (int *)(&a+1);printf("%d\n",*(p-1));这个输出会是...

    作者 : 卿笃军

    你有没有想过,对一个一维数组名取地址,然后用这个地址进行加减运算。这会出现什么样的结果呢?

    演示样例:

    int a[5] = {1,2,3,4,5};

    int *p = (int *)(&a+1);

    printf("%d\n",*(p-1));

    这个输出会是多少呢?

    咦?为什么第二行须要强制转化类型呢?

    答:a是一个一维数组的名字,&a相当于一个指向一维数组的指针。怎么感觉这么熟悉?指向数组的指针,那不就是行指针吗?int (*p)[]。

    行指针+1,就是对指针进行加减操作,其结果还是一个行指针~~~原来如此,须要强制转换为单指针。

    能够看一段代码,例如以下:

    #include

    int main()

    {

    int a[5] = {1,2,3,4,5};

    int *p = (&a+1);

    return 0;

    }

    编译会出现例如以下警告(警告行数:int *p = (&a+1);):

    e1e70bcce39633ac418c11311925e945.png

    上面的警告也告诉我们,&a是一个行指针~~~

    那么,输出结果是多少呢?

    答:当然是5。

    为什么?

    答:上面不是说了嘛,&a就是一个行指针,那就是指向一行的指针咯。行指针+1,不就指向下一行了,这里一行为[5]个,那么int *p = (int *)(&a+1)就要在a的基础上偏离5个位置:(例如以下:上一行表示偏离位数,下一行表示a[]中相应的数据)

    0  1  2  3  4  5

    1  2  3  4  5  *

    咦,这不是越界了吗?移动五位都跑出a[]数组处于' * '号位置了。哦,我看到printf()输出了。你输出的是*(p-1),这里p是一个单指针-1就是往左位移一位即可了,那不就是又回到5的位置了吗?原来是这样,输出结果是5 。

    以下我们用一段代码来显示位移情况~~~

    #include

    int main()

    {

    int a[5] = {1,2,3,4,5};

    int *p = (int *)(&a+1); //+1相当于移动了5位

    printf("%p\n%p\nbit = %d\n",a,p,p-a);

    printf("%d\n", *(p-1));

    return 0;

    }

    d3ed1c1250a0673b5de02dd4c775eea3.png

    展开全文
  • 但对数组名取地址时却要注意了,在理解“对数组取地址”这一表达式的含义时一定要记住:数组名是“数组”这种变量的变量名 这样,&a就好理解了,它取的是“数组”这种变量的地址 &a+1自然也就要跨过整个...

    C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。所以a==&a[0]

    但对数组名取地址时却要注意了,在理解“对数组名取地址”这一表达式的含义时一定要记住:数组名是“数组”这种变量的变量名

    这样,&a就好理解了,它取的是“数组”这种变量的地址

    &a+1自然也就要跨过整个数组,所有元素长度总和,这么长的一个长度。例如:int a[10],那么&a+1就要跨过10个int的长度

    reference:

    对数组名取地址 a[ ],&a - No Sadness - 博客园

    展开全文
  • 对数组取地址赋值给数组指针与普通指针的区别: 以下红色字体的说法是错误的: 使用一级指针来接受&arr,只是表示一个普通的一级指针, 它并没有接收到&arr赋来的跨度,而只接收到了地址而已。...

    对数组名取地址赋值给数组指针与普通指针的区别:

    以下红色字体的说法是错误的:
        使用一级指针来接受&arr,只是表示一个普通的一级指针,
        它并没有接收到&arr赋来的跨度,而只接收到了地址而已。所以,
        p1的跨度只有4个字节。它保存的地址所表示的是arr这个数组的首元素地址
        相当于在赋值过程中,&arr退化为了arr,失去了数组本来拥有的跨度。
        此时p1[i],就是在对数组中的每一个数组元素做遍历了。

    p保存的是数组的地址&arr
    *p保存的是数组首元素的地址:*&arr ---> arr

    同理,以下红色字体的说法同样不正确:
        p2此时的地址已经为arr,*p2就是数组元素的值了。
        而二级指针的特点就是在于它保存的是一级指针的地址,即它的内容就是一级指针的地址。
        *p2就是这个一级指针的地址。
        *(*p2)则为对元素的值取地址,因为数组元素的值是手动赋值的,
        那么**p此时就是对野指针的非法操作了。

       p为&arr首地址
       *p为arr首元素地址
       **p为数组元素内容

    综上:一维数组名对应一级指针,二维数组名对应二级指针,n维数组名对应n级指针。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    int main(int argc, char *argv[])
    {
    	int arr[5] = {1, 2, 3, 4, 5};
    	/*一下的说法是错误的:
    	数组指针才是将地址连同&arr这个地址的跨度一起赋给了指针变量;
    	而是用普通的一级指针来接受的&arr,只是表示一个普通的一级指针,
    	它并没有接收到&arr赋来的跨度,而只接收到了地址而已。所以,
    	p1的跨度只有4个字节。它保存的地址所表示的是arr这个数组的首元素地址
    	相当于在赋值过程中,&arr退化为了arr,失去了数组本来拥有的跨度。
    	此时p1[i],就是在对数组中的每一个数组元素做遍历了。
    	*/
    	//p保存的是数组的地址&arr
    	//*p保存的是数组首元素的地址:*&arr ---> arr
    	int *p1 = &arr;  //其实此处不需要取地址,将二级指针赋值给一级指针会有警告。
    
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\n", p1[i]);
    	}
    	printf("------------------------------\n");
    	
    	//*的优先级为2级,[]、()的优先级为1级
    	//p2的内容是&arr
    	//*p2的内容是*&arr ---> arr,即数组的首元素地址
    	//
    	int (*p2)[5] = &arr;
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\n", (*p2)[i]);
    	}
    	printf("------------------------------\n");
            /*同理,以下的说法同样不正确:
    	p2此时的地址已经为arr,*p2就是数组元素的值了。
    	而二级指针的特点就是在于它保存的是一级指针的地址,即它的内容就是一级指针的地址。
    	*p2就是这个一级指针的地址。
    	*(*p2)则为对元素的值取地址,因为数组元素的值是手动赋值的,
    	那么**p此时就是对野指针的非法操作了。	
    	*/
    
    	//p为&arr首地址
    	//*p为arr首元素地址
    	//**p为数组元素内容
    	int **p = &arr;
    	for (int i = 0; i < 5; i++)
    	{
    		printf("%d\n", p[i]);
    	}
    
    
    	system("pause");
    	return 0;
    }
    
    展开全文
  • c语言对数组取地址

    2014-10-02 20:17:38
    现在又这样一个问题,如果对数组取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地址,就是指针的指针,既二级指针嘛!当然这样的结论是错误的,不然这篇笔记也就没有意义了。 下面我们来逐步分析,...
  • 对数组元素进行固定阈值操作,该函数的典型应用是对灰度图像进行阈值操作得到二值图像。(cvCmpS 也可以达到此目的) 或者是去掉噪声,例如过滤很小或很大象素值的图像点。本函数支持的对图像阈值的方法由 threshold_...
  • C语言中的数组名取地址

    千次阅读 2021-05-07 10:39:43
    数组名取地址,数组指针
  • 2.对数组取对数 import numpy numpy.log([1,2,3])#以e为底,分别对1,2,3对数 numpy.log5([1,2,3])#以5为底,分别对1,2,3对数 即numpy.loga(b)#以a为底,对b中的数字分别对数 3.python指数 对单个数字 ...
  • 有没有一种通用的方法来规避这个问题,并在一行中总结数组值表达式的所有元素/而不创建时间变量?像sum这样的东西(A-2 * A,’ – all’)? 虽然可以通过链接中给出的答案解决我的问题,但是gnovice自己说使用subref是...
  • 对数组取地址

    千次阅读 2010-10-26 19:50:00
    int a[5]={1,2,3,4,5}; int b[100]; 一个数组名代表的是数组中第一个元素的位置,通过数组名我们可以访问数组,先看下面两个问题 ... 答一: 对数组取地址在C标准里面是未定义的行
  • 数组与取地址符“&

    千次阅读 2020-12-27 02:43:27
    涉及数组成员的取址,可以使用数组名加偏移量(p = arr+5)或数组加下标再取地址(p = &arr[5]),那&arr代表什么呢?我一开始只知道arr和&arr的值相等。 #include <stdio.h> int arr[10]; int...
  • 用numpy批量求指数、对数
  • python如何对数组求指数以及对数

    万次阅读 2019-12-25 18:21:36
    指数: math.exp() 只能对一个数求指数,不能对数组进行批量求指数 numpy.exp()既能对一个数求指数,也能对数组进行批量求指数 对数: math.log() numpy.log() 作用同上 ...
  • 不知道大家有没有像我一样百度/谷歌过:对数组取地址究竟是否合法。 浏览了一圈下来 基本上就两种解释:未定义行为 表示整个数组。 那么 ,究竟哪个是对的呢? 首先先来解释一下什么是未定义行为:对于某种...
  • 数组名和数组名取地址的区别

    千次阅读 多人点赞 2018-09-01 14:14:22
    数组名和数组名取地址的区别 在日常编码过程中,特别是C环境下会经常遇到这两种情况; 这篇博客将会对其进行总结: 首先,我们定义了一个数组int a[] = {0,1,2,3,4,5,6,7,8,9}; 不难理解a[0] = 0; a[1...
  • 数组首地址取地址

    千次阅读 2016-03-11 18:03:46
    一、问题来由普通指针可被修改导致地址偏移:#include using namespace std;int main(int argc,char *argv[]) { int a = 6; int *p = &a; //p存放一个地址,pp存放p的地址,上面的代码可以让p存放的地址偏移 ...
  • c语言中数组名和数组名取地址理解

    千次阅读 2020-04-05 23:00:09
    //数组名的地址,不是指针常量的地址,而是指向整个数组的指针。 *3)当为字符数组的时候,使用数组名打印输出的时候,如下所示 printf("%s",ch);//打印输出的是 hello std::cout 注意:sizeof(数组名)和sizeof...
  • #include using namespace std;int main(){int num[5]={1,2,3,4,5};...} &num的类型是int[5] 所以&num+1指向的是num数组的最后一个元素的后面,再-2相当于指向数组的倒数第二个数,所以最后的结果就是4
  • Python对数组取并集倒是挺简单的,但是数组中的元素不是像1234这样简单的数据,数组中的元素是字典,然后我怎么根据数组中字典的其中一个key来并集
  • (1)ints是指针常量 , 即数组首元素ints[0]的地址 . (2)&ints是整个ints[20]的首地址 , 是以整个数组为角度来看 , 虽然它与ints[0]的值相同 , 但是&ints+1就已经增加了20个int类型的字节的长度了. 注 : arr[1] ...
  • python对数组排序并索引其位置

    千次阅读 2022-03-18 21:19:25
    在进行编程的过程中,很多时候需要对数组进行排序,并索引其位置所在处。特别是在算法的应用中这是...#案例5----对数组进行排序并索引原来所在的位置--以数组numbers为例--sort,sorted numbers=[1,5,2,3,9,4] #num=so
  • 浅谈C/C++数组取地址

    千次阅读 2017-10-23 17:58:26
     &是取地址符,这里取的也是第一个元素的地址。 我们可以看到结果如下: 结果确实是相等的。   我们再来看下面的代码: #include using namespace std; int main(){ int ...
  • 本文记录我在学习数组时对数组一些比较难懂的地方的理解。 在绝大多数的表达式中,数组名的值就是指向数组第一个元素的指针,这是大家耳熟能详的。也就是说,一个数组的名字就是一个指针常量,表示的是数组第一个...
  • 1、源程序 #include"stdio.h" #include"stdlib.h" #include"string.h" voidfun(char*s,char*t) { intsl,i,j; sl=strlen(s); if(sl%2)sl-=2;//调整sl的值,使的无论是奇数还是偶数,在下列操作都可以统一。...
  • sort() 方法用于对数组元素进行排序。 注意:数组在原数组上进行排序,不生成副本。即修改原数组 arr.sort(sortNumber); 说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点...
  • Numpy掩码式数组详解

    千次阅读 2021-02-10 15:08:53
    对负数取对数 import numpy as np triples = np.arange(0,10,3)#每隔30到10中的整数,(0,3,6,9) signs = np.ones(10)#(1,1,1,1,1,1,1,1,1) signs[triples] = -1#(-1,1,1,-1,1,1,-1,1,1,-...
  • 绝对值,使用np.maximum()而不是np.max()。 import numpy as np x=np.array([[1,-2],[-1,0]]) print(x) abs=np.maximum(x,-x) abs 结果如下:
  • 两个对数组元素求和,求积的算法题求数组的子数组元素和的最大值。 思路: 遍历数组一遍,如果遇到负数则对累加结果清零。同时记录累加值所达到的最大值。代码块int maxsum(int *num, int n) //求数组子数组和的...
  • 对数组取地址打印出来的结果与直接打印数组名得到的结果是同一个地址,如: C/C++ code? 1 2 3 4 5 6 7 8 9 10 #include    int main(void) { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,783
精华内容 24,313
热门标签
关键字:

对数组元素取地址