首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ extern 数组指针

在一次使用 extern 声明全局变量过程,因为数组指针混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含)文件全局变量。...现在问题是这样: 在一个 a.cpp ,有个全局变量 char a[] = "......关于这段话理解,我觉得引入编译知识比较好理解,数组名是一个符号,枚举符号一样,有其自身值,数组值就是数组首地址。在编译过程,这些符号常亮会被替换为地址符号。...而指针是一个普通变量,变量值存放数组地址。虽然数组指针都可以进行元素访问,但是其本质是有很大区别的!...这里问题就出现了:由于在这个文件声明 a 是一个指针变量而不是数组,链接器行为实际上是把指针 a 自身地址定位到了另一个 .c 文件定义数组首地址之上,而不是我们所希望数组首地址赋予指针

15700

C数组指针练习

一、数组笔试题解析 知识点: 只要是地址就是4/8个字节  数组数组名是数组首元素地址 但是有2个例外: 1. sizeof(数组名) - 数组名表示整个数组,计算是整个数组大小...&数组名 - 数组名也表示整个数组,取出是整个数组地址 除了这个2个例外,你见到所有的数组名都表示首元素地址  sizeof sizeof 是计算对象或者类型创建对象所占内存空间大小...,单位是字节 sizeof 是操作符,不是函数 strlen strlen 求字符串长度,计算是字符串\0之前出现字符个数 统计到\0为止,如果没有看到\0,会继续往后找 strlen...,如果小伙伴还有不理解内容,可以参考之前关于指针进阶博文。...文章某些内容我们之前有介绍,所以只是一笔带过,还请谅解。 希望以上内容对大家有所帮助,如有不足望指出

14350
您找到你想要的搜索结果了吗?
是的
没有找到

8.6 C语言指针数组多重指针

01什么是指针数组 1、一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组每一个元素都存放一个地址,相当于一个指针变量。...2、一般形式 类型名 *数组名[数组长度]; 类型应包括符合*,如int *表示是指向整数数据指针类型。...然后再p前面的*结合,*表示此数组指针类型,每个数组元素都可以指向一个整型变量。 02指向指针数据指针 1、在了解了指针数组基础上,需要了解指向指针数据指针变量,简称指向指针指针。...03指针数组作main函数参数 1、main函数第一行一般写成int main()或int main(void),括号是空或有void,表示main函数没有参数,调用main函数时不必给出实参...3、命令行一般形式 命令名 参数1 参数2……参数n C语言 | 递归求年龄 更多案例可以go公众号:C语言入门到精通

9702825

C语言】C语言数组指针

---- 友情提醒:本文可能是全csdn最详细指针内容了,希望你能用心读下去 前言 接下来讲解部分是指针进阶,包含多种指针以及对应数组,这部分章节对我们来说很重要,也是c语言中重点模块儿,重要性不言而喻...,那么他们在内存空间位置肯定是不同,而数组名代表首元素地址,两个不同数组首元素地址肯定也是不相同啊,那么自然str1肯定str2是不相同啦 2.首先常量字符串要在内存开辟空间存储它本身...(c/c++会把常量字符串储存到单独一个内存区域中) 当这两个指针指向同一个常量字符串时,实际上就是指向同一块儿地址**(指针就是地址,地址就是指针)** 2.数组指针 2.1数组指针定义 1.数组指针嘛...那么由此便可以说明问题,&arr实际上取出是整个数组地址 2.3数组指针使用 我们可以通过打印数组内容方式,来练习使用一下数组指针 int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10...,这个指针类型是一个函数指针,指向函数是一个返回类型为void,参数类型为const char 一个函数,这个指针存放了test函数地址 代码2 首先pfunArr是一个数组,这个数组大小是

64.2K22

c专题之指针---数组指针指针数组区别

2、数组指针指针数组区别(今天主题)。...3、函数指针指针函数区别(下一篇文章会进行详细讲解)。...一、数组指针指针数组区别: 1、从字面意思去理解他两区别: (1)指针数组实质是一个数组,这个数组存储内容全部是指针变量。...第三步:以后继续向外扩展 (3)用上面的规律来分析这3个符号: 第一个,int *p[5]; 核心是p,p是一个数组数组有5个元素,数组元素都是指针指针指向元素类型是...第二个,int (*p)[5]; 核心是p,p是一个指针指针指向一个数组数组有5个元素,数组元素是int类型; 总结一下整个符号意义就是数组指针

1.6K10

C指针小结(CC++程序设计

C指针 相关基础知识:内存分配(谭浩强版) 1、整型变量地址与浮点型/字符型变量地址区别?(整型变量/浮点型变量区别是什么) 2、int *p,指向整型数据指针变量。...4、*p :指针变量p指向存储单元(变量) 5、p = &a——>> *p = *&a 6、用指针作函数参数 7、调用函数,由于虚实结合是采用单向“值传递”方式,只能从实参向形参传数据,形参值改变无法回传给实参...10、如果指针变量p已指向数组一个元素,则p+1指向同一数组下一个元素。 11、用指针变量作函数形参接受数组地址。...数组指针指针数组区别 1 #include"iostream" 2 using namespace std; 3 int main() 4 { 5 void sort(int...原文链接 13、实参形参结合有一下4种形式: 实参 形参 数组数组数组指针变量 指针变量 数组指针变量 指针变量 14、实参数组名a代表一个固定地址,或者说是指针常量,因此其值不可改变

584110

详解C语言中数组指针指针数组

·详解数组指针指针数组 ·数组指针 一、区分 首先我们需要了解什么是数组指针以及什么是指针数组,如下图: int *p[5]; int (*p)[5]; 数组指针意思即为通过指针引用数组,p先*结合...2.运算 由于指针指向是一个地址,因此数组指针也同样可以进行相关运算;例如指针加减可以实现指针指向数组上一个或者下一个元素功能。这边需要说明,数组指针中进行乘法除法是没有意义。...如下图所示: 在定义指针变量时候需要定义类型,如果指针p指向了一个数组一个元素,那么p+1并不是将地址加上1,而是系统判定类型之后加上一个数组元素所占用字节数(即为p+1*d)。...&a[1][2] a[1][2]地址 *(a[1]+2), *(*(a+1)+2), a[1][2] a[1][2]值 上图都是二维数组地址不同表示形式。...假设我们定义一个数组,各个元素指向不同字符串,如下图: 上图所示,我们定义一个指针数组arr,然后把各字符串地址赋给各个元素,即arr[0]arr[1]。

2.1K20

c专题指针-----数组指针关联

(譬如int a, b, c, d;)一次定义一个数组(int a[4]);这两种定义方法相同点是都定义了4个int型变量,而且这4个变量都是独立单个使用;不同点是单独定义时a、b、c、d在内存地址不一定相连...数组多个变量虽然必须单独访问,但是因为他们地址彼此相连,因此很适合用指针来操作,因此数组指针天生就叫纠结在一起。...2、从内存角度理解指针访问数组实质: (1)数组特点就是:数组各个元素地址是依次相连,而且数组还有一个很大特点(其实也是数组一个限制)就是数组各个元素类型比较相同。...3、指针数组类型匹配问题: (1)int *p; int a[5];p = a;// 类型匹配 (2)int *p; int a[5];p = &a;// 类型不匹配。...从意义上来看,a&a[0]是数组首元素首地址,而&a是整个数组首地址;从类型来看,a&a[0]是元素指针,也就是int *类型;而&a是数组指针,是int (*)[5];类型。

1K10

C语言中指针数组数组指针区别

指针数组:首先它是一个数组数组元素都是指针数组占多少个字节由数组本身决定。它是“储存指针数组简称。 数组指针:首先它是一个指针,它指向一个数组。...下面到底哪个是数组指针,哪个是指针数组呢: A) int *p1[10]; B) int (*p2)[10]; 这里需要明白一个符号之间优先级问题。 “[]”优先级比“*”要高。...p1 先与“[]”结合,构成一个数组定义,数组名为p1,int *修饰数组内容,即数组每个元素。那现在我们清楚,这是一个数组,其包含10 个指向int 类型数据指针,即指针数组。...至于p2 就更好理解了,在这里“()”优先级比“[]”高,“*”号p2 构成一个指针定义,指针变量名为p2,int 修饰数组内容,即数组每个元素。数组在这里并没有名字,是个匿名数组。...本文实验以外部分转载自:http://c.biancheng.net/cpp/html/476.html

1.9K60

深入解析C语言数组指针(0)

有人说它是C语言灵魂,只有深入理解指针才能说理解了C语言。暂且撇开这些观点不谈。这章是我在阅读《C指针》这本书读书笔记。...值类型 假设我们对上面的第三个位置声明如下: float c=3.14;   我们可以看到这c存储值并不一样,我们声明是一个浮点数,二内存显示c是一个整数。...所以a值为112,b值为-1,c值为3.14,值得注意是d值是100而不是112,e值是108而不是3.14。如果你认为de是指针所以就能自动获取存储于位置100108值那就错了。...指针运算 C指针算数运算只包含以下两种形式:   (1)指针  +/-  整数   (2)指针  -   指针   标准定义第一种形式只能用于指向数组某个元素,整数相加减就是让指针数组前后移动位置...我们有以下结论:   (1)当你根据某个固定数目的增量在一个数组中移动时,使用指针将比使用下标更有效率。   (2)声明为寄存器变量指针通常比位于静态内存堆栈指针效率更高。

1.3K30

c++常量指针指针常量_指针指向二维数组

** 一:常量 ** 常量指针,指针常量,常量指针常量 a)常量定义:不可修改值,例如250,’A’ b)const关键字功能:将变量常量化,四种形式 (1)const可以修饰普通变量,一旦修饰该变量...,该变量就当做常量看待,不可再更改 Const int a=250;//将变量a常量化 A=200;//gcc编译器报错 (2)常量指针:不能通过指针变量来修改指向内存区域数据,主要目的是保护数据不可篡改...*pa=300;//可以 printf("a=%d\n",*pa); int b=200; *pa=&b;//不可以,gcc报错 printf("a=%d\n",*pa); (4)常量指针常量:指针本身指向内容都不可修改...4个字节,十六进制每两个数字是一个字节,左是高字节,右是低字节 ** 如何做到操作访问4字节 某1个字节或者某2个字节数据呢?...1字节,2字节数据 //2、获取一字节数据 char *p1=(char *)&a;//将aint型指针强制转化为char类型指针 printf("a=%#x\n",*p1++);//0x78

70820

CCPP结构字符数组字符指针

结构字符数组字符指针 一般情况下我们在结构中都使用字符数组来存储字符串,是否可以使用指向char指针来代替字符数组呢?...pnames { char *first; char *last; } 使用区别: struct names veep = {"abc","def"};//字符串全部存储在结构内部 struct...pnames treas = {"hig","klm"};//字符串全部存储在编译器存储常量地方(特别注意,是利用指针定义数组,不是之前定义好) #define LEN 20 struct pnames...struct pnames结构体不需要为字符串分配任何存储空间,它使用是存储在别的地方字符串,指针只提供操作可能。...有关结构体字符数组其他用法: 可以使用malloc分配内存并使用指针储存该地址。(详见C Primer Plus P459)

1.5K20

C语言数组指针关系,使用指针访问数组元素方法

数组指针如果您阅读过上一章节“C语言数组返回值”内容,那么您是否会产生一个疑问,C语言函数要返回一个数组,为什么要将函数返回值类型指定为指针类型?...换句话说,C语言中数组指针到底是什么关系呢?...我们可以通过C语言寻址符“&”来返回数组变量存储在内存地址和数组变量第一个元素存储在内存地址,以及指针引用内存地址进行一个比较,如下实例代码:#include int main...:61fe10(不同计算机可能输出有所不同,但三个一般都是一样),也就是说,数组存储在内存地址或者说指针引用内存地址指向数组第一个元素存储在内存地址。...换句话说,数组是一个指向该数组第一个元素内存地址指针

12220

c语言从入门到实战——基于指针数组指针数组

基于指针数组指针数组 前言 指针数组是指数组元素都是指针类型,它们指向某种数据类型变量。...基于指针数组(Array of Pointers)指针数组(Pointer to Array)是两种常见C/C++语言中数据结构,它们在内存布局使用方式上有所不同。...这个指针固定指向数组首地址,通过数组索引可以访问数组元素。这种结构常用于操作整个数组,例如作为函数参数传递数组。...首先从一个问题开始,我们之前都是在函数外部计算数组元素个数,那我们可以把函数传给一个函数后,函数内部求数组元素个数吗?...二级指针 指针变量也是变量,是变量就有地址,那指针变量地址存放在哪里——二级指针 对于二级指针运算有: *ppa 通过对ppa地址进行解引用,这样找到是 pa , *ppa 其实访问就是

14910
领券