精华内容
下载资源
问答
  • 指针数组获取长度

    2021-06-17 14:36:15
    试了好多次,一端定义初始化了指针数组,另一端要想访问指针数组,只能通过函数传参,将指针数组首地址以及指针数组的的长度传递过去。没有获取长度的函数或方法。

    试了好多次,一端定义初始化了指针数组,另一端要想访问指针数组,只能通过函数传参,将指针数组首地址以及指针数组的的长度传递过去。没有获取长度的函数或方法。

    展开全文
  • 引入<malloc.h>头文件,使用其中的_msize()函数得到数组的字节数,再除以sizeof(type)即可。 int* a; a = (int*)malloc(sizeof(int) * 6); cout<< _msize(a)/sizeof(a[0]);

    引入<malloc.h>头文件,使用其中的_msize()函数得到数组的字节数,再除以sizeof(type)即可。

    int* a;
    a = (int*)malloc(sizeof(int) * 6);
    cout<< _msize(a)/sizeof(a[0]);
    展开全文
  • 数组指针和指针数组 函数指针 字符指针 在开始讲解这章节之前,我们需要了解指针前面声明的类型的意义 类型 * 指针名 对于指针来说,我们在给指针进行声明时,我们声明的类型并不是指针的类型,而是指针所指向的...

    指针的进阶(一)目录:


    字符指针

    在开始讲解这一章节之前,我们需要了解指针前面声明的类型的意义

    类型 * 指针名

    对于指针来说,我们在给指针进行声明时,我们声明的类型并不是指针的类型,而是指针所指向的地址的类型,也就是指针看待这段地址的方式,它该如何读取数据,它如果加一该移动多少位,只有了解了这个才能方便理解下面的内容

    我们首先来说的就是字符指针char*

    一般我们是这样运用字符指针的

    	char a = 'a';
    	char* p = &a;
    

    但是我们还能以这种方式运用

    	char*str = "hello world";
    

    这时候,经常就会有初学者以为我们的指针指向的是hello world这个字符串,但其实这里只是把字符串的首元素的地址保存到了这个指针当中。
    在这里插入图片描述
    同时我们还需要理解这样的指针与字符串的区别。

    例如:

    	char str1[] = "hello";
    	char *str2 = "world";
    

    这里的str1是在栈上开辟一块内存空间来存放hello这段字符,而这里的str2是用指针指向常量区的‘’world‘’这段字符,所以我们无法给str2进行赋值与修改,因为常量是不可改变的,我们也无法将这str1与str2进行比较,因为他们是本质不同的两样东西。
    借此,在引申一个小内容

    	#include<stdio.h>
    int main()
    {
    	char str1[] = "helloworld.";
    	char str2[] = "helloworld.";
    	char* str3 = "helloworld.";
    	char* str4 = "helloworld.";
    	if(str1 == str2)
    		printf("1\n");
    	else
    		printf("0\n"); 
    	if(str3 == str4)
    		printf("1\n");
    	else
    		printf("0\n"); 
    	return 0;
    }
    

    在这里插入图片描述
    为什么在这里,str1与str2不同呢?
    因为我们给字符串赋值时,是在栈上面开辟一个内存空间,来给这个字符串存放一个数值,虽然他们存放的内容是一样的,但是它们存放在不同的内存块中,所以进行比较的时候是不同的
    那为什么str3和str4是相同的呢?
    因为它们是字符指针,它们指向的都是常量区中的hello world这段字符,它们指向的内容一样,所以它们相同。
    这也就是为什么我们在进行字符串的比较的时候运用的都是strcmp这个函数的原因。


    数组指针和指针数组

    在我刚刚接触指针的时候,我经常会搞混两个东西,一个是数组指针,一个是指针数组,因为它们太过相似,但如果你了解了运算符的优先级以及我之前说的指针如何看待类型,你就会很快的区分它们
    在这里插入图片描述
    上图中的两个指针是不是特别相似?那我们如何区分呢?

    首先,我们先看几个运算符的优先级对于p1,[] 的优先级是很明显高于 *的,所以它的本质就应该是一个数组,而剩下的int *就应该是它所存放的数据类型,所以它是一个存放指针元素的数组,即指针数组。
    而对于p2,它的()的优先级是很明显高于 [] 的,所以我们应该先去考虑括号中的内容,括号中是一个指针 *,所以它的本质就应该是一个指针,而剩下的就是它所指向的地址的类型,所以它是一个指向数组的指针,即数组指针。

    如果我们要了解一个数组指针是如何作用的,我们首先要了解这样一个知识点。
    在这里插入图片描述
    对于一个数组,它的数组名和&数组名有什么区别。
    我们都知道数组名是这个数组的首元素的地址,但是&数组名却不是很了解。

    int main()
    {
    	int arr[10] = {0};
    	printf("%p",arr);
    	printf("%p",&arr);
    	return 0;
    }
    

    在这里插入图片描述
    我们查看它们的地址,却完全的一样,那是不是证明它们相同呢?

    int main()
    {
    	int arr[10] = {0};
    	printf("%p",arr+1);
    	printf("%p",&arr+1);
    	return 0;
    }
    

    其实不是,我们再给它们分别+1
    在这里插入图片描述
    这里区别就显现出来了,arr+1加的只是一个元素的大小,而&arr+1加了一整个数组的大小。
    所以我们就能了解,&arr指向的是这一整个数组的地址。
    而我们的数组指针,是一个指向数组地址的指针,所以数组指针应该这样指向一个数组。

    	int (*p)[10] = &arr;
    

    函数指针

    在了解函数指针前我们要先了解一个小的误区

    在这里插入图片描述
    这两个哪一个才是函数指针呢?
    还是之前判断数组指针的那个方法,我们看优先级,先看括号,它是一个指针,剩下的就是它所指向的类型,一个返回值为void的函数。
    而第二个其实就是一个函数的声明,声明一个返回值为void*的函数

    我们该如何调用这个函数指针呢?
    在这里插入图片描述
    无论是直接调用还是进行解引用后调用,我们都可以直接使用这个函数

    #include<stdio.h>
    
    void print()
    {
    	printf("1\n");
    }
    
    int main()
    {
    	void (*p)();
    	p = print;
    	p();
    	(*p)();
    	return 0;
    } 
    

    在这里插入图片描述
    在使用函数指针的时候,因为函数的特殊性,在很多情况下代码的可读性会十分差,如下面这段代码。

    	void(*signal(int,void(*)(int)))(int);
    

    在这里插入图片描述
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191109224245462.pg
    这是它的参数类型

    这是它的函数名
    外面剩下的则是它的返回类型。
    所以它是一个参数为int 和函数指针的一个函数,返回值为函数指针。
    这样的代码让人很难理解。
    那该如何简化呢?我们可以用typedef进行简化

    	typedef void(*p)();
    

    简化完后
    在这里插入图片描述
    这样我们的代码可读性就大大的提升了。

    第一部分就讲到这里吧

    展开全文
  • 如何使用sizeof获取指针指向数组的长度 一般可以直接使用sizeof加数组名...为了获取指针指向数组大小,下列函数可以采用,但也只能获取固定结束符的数组长度。 #include <stdio.h> int Sz_len(int *Data) { ...

    如何使用sizeof获取指针指向数组的长度

    一般可以直接使用sizeof加数组名获取数组长度,但是封装为函数后,一般使用指针来传递数组值,但在函数体内使用sizeof指针是不对的,此时结果是指针的大小,并不是数组的大小。为了获取指针指向数组的大小,下列函数可以采用,但也只能获取固定结束符的数组长度。
    #include <stdio.h>
    int Sz_len(int *Data)
    {
    int b;
    b=1;
    while(Data++ != 0xFF)//定义数组结尾符标志0xFF
    {
    b++;
    }
    return b;
    }
    int main()
    {
    /
    我的第一个 C 程序 */

    int arr[20]={0xA5,0x5A,0x00,0x14,0x82,0x31,0x35,0x32,0x35,0x30,0x30,0x30,0x32,0x33,0x32,0x00,0x00,0xBF,0xA6,0xFF};
    printf("%d\r\n",Sz_len(arr));
    return 0;
    }

    展开全文
  • 将用一个指针来指向这个数组。 刚学C++,在动手想写东西时,考虑到想要取得这个动态数组的长度。网上找了点资料。基本想没得到好的答案,但看到了有人提到用 _msize取内存计算的方法。我自己测试了一下,貌似可以。...
  • 指针数组 实际是数组,用来存储指针...注意:定义数组指针变量要与实际的数组大小要一致 示例: int main() { int intArr[4] = { 1,2,3,4 }; int* pointArr[4]; //指针数组 int(*arrPoint)[4];//数组指针 arrPo
  • 本文较为详细的分析了关于理解C++指针数组,数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。 、关于数组名 假设有数组: ? 1...
  • C语言 获取数组大小,遍历数组

    千次阅读 2019-04-10 14:50:24
    //指针遍历 void pp(int * ary, int n) { for(int i = 0; i < n; i++) { *ary += n; printf("%d ", *(ary++)); } printf("\n"); } //一般遍历 void pp2(int ary[], int n) { // int n = sizeof(ary) / ...
  • 教你获取new出的数组大小

    千次阅读 2020-05-07 18:15:16
    之前在网上没怎么看到获取数组大小的文章,现在给大家说一下自己的方法。 首先,C++new出的数组或者对象C++都是知道其内存大小的,既占用字节,而这占用字节在哪儿呢,没错,就在变量地址 - 4int占用字节的大小 ...
  • 在c/c++中定义数组时int a[10], a表示数组首元素的地址,&a代表的是数组的地址,a+1偏移4个字节,&a+1偏移40个字节(10*4=40) ...//定义一个数组类型 typedef int (myTypeArray)[10]; // myTypeArray myArr...
  • C语言通过数组指针获取长度

    千次阅读 2019-02-08 13:20:00
    2019独角兽企业重金招聘Python工程师标准>>> ...该方法对数组的成员对象类型具有约束,不能作为获取数组长度的通用接口 转载于:https://my.oschina.net/yangzhiwei256/blog/3008632
  • c++指针数组,int *,char *,string *

    千次阅读 多人点赞 2019-07-03 18:59:36
    数组指针归根结底是个指针,指向数组的第一个元素。我们以int型、char型、str型指针数组为例。 整型指针数组 #include<iostream> #include<iomanip> using namespace std; int main() { int a[5]={1,2,...
  • 因为C++下获取动态指针数组长度,使用sizeof函数的话,肯定是计算的指针字节。而有的一些变量使用的是float*或者其他类型。。此时应该使用_msize()/data,函数,就可以得到动态数组中的数据数量
  • 获取数组指针指向空间大小

    千次阅读 2016-12-08 16:27:08
    注:在 函数传递后,数组会退化为一个普通指针,此时在函数体内使用sizeof(指针形参) / sizeof(type) 是无法得到指针指向区域空间大小的。解决方法是将数组大小作为函数的形参传递进去。 (2)获取指针指向空间的...
  • C++面试题-指针-指针数组与数组指针

    千次阅读 2019-01-11 00:16:33
    C++面试题-指针-指针数组与数组... int *p[n]是指针数组,指向数组里面的每个元素,即p[0]指向第一个元素,p[1]指向第二个元素,以此类推,p[n-1]指向第n-1个元素,返回值是整型的。   问:下面代码的输出结果是什...
  • 指针数组: 首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针: ...
  • C语言直接操作底层,指针操作不当很容易发生越界或者溢出。一直困扰指针指向的内容的长度判断,现在参考网上的答案,整理如下: 1、指针只给出了两种信息:所... c语言里面通常会多加一个参数来表示指针指向内容的长
  • C++中的指针、数组指针与指针数组、函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针、如何使用...C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力。指针可
  • 是类型就有大小且都是4字节大小,里边只是存储了一个变量的地址而已。 大小为4字节是因为寻址空间为(32位)0x00000000~~0xffffffff,最大只需要4字节,所以就设定指针类型大小为四字节 不管什么类型的指针,char * 、...
  • 文章目录1 数组名1.1 数组名称的作用1.2 数组名的2种特例情况2 数组指针的定义方式2.1 typedef定义数组类型2.2 typedef定义数组指针类型 1 数组名 参考本人博客《C++数组》第2.2节数组数组名...
  • 得到指针指向的数组的长度

    万次阅读 2016-05-03 14:58:48
    1 、定义数组,要给定其长度,也可以用Type a[ ] = {……} 的方式。...2、指针指向的字符数组长度的获取方法,不能用sizeof,因为用sizeof(指针),得到指针长度为4 应该用strlen()函数。 #include  #include  i
  • 举例说明: char*p; char test[10]; p=test; ...sizeof(p)=4(32位系统) //实质是求指针类型所占字节数,32位对应4字节,64位对应8字节 ...sizeof(*p)=1 //实质是...sizeof(test)=10 //虽然数组名test指向第一个数char
  • 指针数组 指针移动方式访问数组元素: int a[5], *p; // a存放了数组的首地址 p=a; // 数组首地址赋给p p++; // 向下移动4字节 指针数组名都是地址,因此可以混合使用访问数组元素。...
  • const char* str[] = { "Hello","abc","applef","man","C程序设计","指针数组" }; const char* pdest = "指针数组"; static int str_search(const char*key, const char**pstr, int num) { int i; for (i = 0; ...
  • 开门见山,今天的主要内容是:指针数组,数组指针,函数指针,函数指针数组,...顾名思义,指针数组就是一个数组里面存放的内容是指针 如:int *p1[10]解析1.首先写出一个数组:p1[10],这是一个大小为10的数组  2.其次
  • 【嵌入式开发】C语言 指针数组 多维数组

    万次阅读 热门讨论 2014-03-19 01:52:05
    指针数组, 数组中的元素 指向一个一维数组 ; ④ 多维数组 作为参数的时候, 其列数 不能省略 行可以省略, 否则就找不到指针数组中的其它指针了 ; ⑤ 指针数组 和 二维数组 , 指针数组用于存储长度可变的数组, 更...
  • C++ 指针 数组 字符串

    2018-12-18 22:42:13
    既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。 可以对字符串变量中某一字符进行操作,string word=″Then″;word[2]=′a′; 可以在输入输出语句中用字符串变量名,输入输出...
  • Golang中数组指针和指针数组区别一....指针数组 :它是一个数组,该数组的元素都为地址 一.数组指针 1.语法 var arrPtr *[size] type 2.实例 一步一步创建,容易理解 var arrPtr * [4]int // 创建一个指针 arrP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,174
精华内容 60,069
关键字:

获取一个指针数组的大小