iOS 之 数组指针

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

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

//p 相当于int (*p) [5] = &a;

// &a+1 p相当于,p移动了a本身大小的位置,即 a + 5*sizeof(int)

printf("%d",*(p-1));  // p -1  = p-sizeof(int)即为最后一个元素的值。

时间: 2024-12-19 07:44:01

iOS 之 数组指针的相关文章

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

黑马程序员---C基础10【数组指针】【指针数组】【字符串指针】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [数组指针] 1.数组指针: 定义一个指针指向数组的某一个元素 数组元素指针:指针变量可以指向数组元素: 1)数组名a不代表整个数组,只代表数组首元素的地址: 2)是指向首地址,而不是每一个元素:  2.数组指针的引用: 在指针向数组元素时,允许以下操作 加一个整数(用+或+=),如p+1: 减一个整数(用-或-=),如p-1: 自加P++ 自减p--; 两个指针相减:p1-p2: P+1指向

指针数组、数组指针、指针函数、函数指针的简介

一.指针数组:本质是一个数组,里面存放的元素是指针.比如:char *nums[10];定义了一个名称为num 长度为10的存放元素为:指向char类型数据的指针变量的数组.数组中的每一个元素都是一个指针,每一个指针都能够指向一个字符串. 在程序中举例: int main(int argc, const char * argv[]) { // 指针数组就是用来表示字符串的数组 char *strs[10]; // 声明了一个数组, 同意存储 10 个字符串 // 每个字符串 strs[0] =

指针数组、数组指针、指针函数、函数指针的简单介绍

一.指针数组:本质是一个数组,里面存放的元素是指针.例如:char *nums[10];定义了一个名称为num 长度为10的存放元素为:指向char类型数据的指针变量的数组.数组中的每个元素都是一个指针,每个指针都可以指向一个字符串. 在程序中举例: int main(int argc, const char * argv[]) { // 指针数组就是用来表示字符串的数组 char *strs[10]; // 声明了一个数组, 允许存储 10 个字符串 // 每一个字符串 strs[0] = "

数组指针和指针数组的区别

数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语句执行过后,也就是

指针数组 数组指针

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 数组指针:a pointer to an array,即指向数组的指针 还要注意的是他们用法的区别,下面举例说明. int* a[4]     指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于* int (*a)[4]   数组指针 表示:指向数组a的指针 元素表示:(*a)[i] 注意:在实际应用中,对于指针数组,我们经常这样使用: 1

收藏的数组指针知识点

首先是简单的一维数组 定义一个数组int arr[5]; arr是指向数组第一个元素的int类型指针,arr+1就是指针数组第二个元素的int类型的指针,*arr就是取这个指针里面对应的值,这个比较好理解 int arr[5] = { 1, 2, 3, 4, 5 };//定义数组 printf("\n%x", *arr);//1 =arr[0] printf("\n%x", *(arr+1));//2 =arr[1] 到了二维数组这边比较蛋疼,找了很久找到一句话来解

数组指针与二维数组的寻址

引例:已知如下程序 1 #include <stdio.h> 2 main() 3 { 4 int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ; 5 int (*p)[4] = x, k = 1, m, n = 0; 6 for(m=0; m < 2; m++) 7 n += *(*(p+m)+k); 8 printf("%d\n",n); 9 } 试写出程序的输出值.(虽然我很讨厌做这种笔头功夫的题,我也坚信编程语言是在实践中练出

C语言学习笔记(6):如何从变量声明的表面上来区分指针数组和数组指针

举例:int *p[5]是指针数组int (*p)[5]是数组指针区分两者只要看变量名p周围的修饰符即可. 这里要明确两点:1.不论int *p[5]还是int (*p)[5]都不应该看成一个整体,而应该看成一些修饰符来修饰变量p,从而使p得到准确定义:2.[]的优先级要比*高,相同优先级修饰符,采取从左向右的编译方式. *p[5]由于[]优先级高所以[]先修饰变量名p,所以p是一个数组名,然后再看其它修饰符,可以发现是一个int * 类型的数组,即p为指针数组. (*P)[5]由于()和[]两