1.数组指针:即指向数组的指针 那么, 如何声明一个数组指针呢? ]; /*括号是必须写的,不然就是指针数组:10是数组的大小*/ 拓展:有指针类型元素的数组称为指针数组. 2.通过指针引用数组元素的基本方法 (1)小标法:a[i]. (2)指针法:* (a+i) 或 * (p+i) 或 p[i].其中,a是数组名,p=a,即p指向数组a首元素的地址. 问:为什么* (a+i) 和* (p+i)是等价的,或者说是引用的同一个数组元素呢? 答:在C语言中,数组名代表的是数组中首元素的地址.在程序编…
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中).所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址. 这种指针变量的定义与以前介绍的指向变量的指针变量相同.应当注意,如果数组为int型,则指针变量亦应指向int型. C语言规定数组名代表数组的首地址,也就是第一个元素的地址.因此,下面两个语句等价: p=&a[0]: p=a: 注意数…
结合内存存储数据的机制,c语言里指针的出现和使用也就不奇怪了,如果先学了内存的一些知识,以及程序运行机制,到了c指针这块就会清晰很多. #include <stdio.h> int main(void){ int a = 180; int b = 156; int *c  = &a;   // int 指数据类型 * 指这是一个指针变量,存的是地址,&a是 a变量的地址, 把a的地址存在c这个指针变量类型里. *c = 190 ;      // 这里c里已经存上一个地址数据了…
1.数组的本质 (1)数组是一段连续的内存空间 (2)数组的空间大小:sizeof(array_type)*array_size; (3)数组名可看做指向数组第一个元素的常量指针 (4)数组声明时编译器自动分配一片连续的内存空间 ,而指针声明时只分配了用于容纳地址值的 4 字节空间 2.指针的运算 (1)指针是一种特殊的变量,与整数的运算规则为: p + n == (unsigned int)p + n * sizeof(*p); 当指针 p 指向一个同类型的数组的元素时,p+1 指向当前元素的…
首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组,所以基类型是int int a[2][2] = {{1,2},{3,4}}; 上面是由两个一维数组类型组成一个二维数组,所以基类型是一维数组 有了上面两个例子,相信大家能知道基类型是啥意思. 接下来先说说一维数组和一级指针关系 首先指针说白了就是存放地址,把变量地址赋予指针 取出该变量的数值应该用*…
前面学习了字符串是一种字符数组,又知道了指针变量和数组的关系,这里来看一下指针和字符串的关系. #include <stdio.h> int main(void){ char str = "hello"; char *ptr = "abcd";  // 这里定义ptr为 char类型的指针, ptr的地址会指向这个字符串的首个字符, . int i; for(i=0;i<4;i++){            // printf("%c&q…
今天学习c语言的一个小例子,果然还是陷入了php的编程习惯里,这里记录一下. #include <stdio.h> //例子很简单,就是编写一个函数把传递进来的数组里的值都赋值为1而已 //不仅仅是参数和数据要指明类型,函数本身也要指明返回类型,如果没有返回类型,只是操作过程用void void ope_arr(int arr[],int n)   // 注意这里传递的形参 arr[] ,这里传递进来的是数组的地址 { int i; for(i=0;i<n;i++) { arr[i]=1…
1 数组的特点: 长度固定.元素数据类型相同.下标从0开始 1.1 声明和初始化: var array_name [size] type         var arr1 [10] float32         var arr2 = [5]int{1, 2, 3, 4, 5}   // {}中元素的个数不能大于[]中的数字         // 如果忽略[]中的数字,即不设置数组大小,则会根据元素个数自动设置大小         可以通过 len(array) 求得数组array的长度.  …
指针: 一个变量,其值为另一个变量的地址,即,内存位置的直接地址. 声明: int *ptr; /* 一个整型的指针,指针指向的类型是整型 */ double *ptr; /* 一个 double 型的指针,指针指向的类型是double*/ float *ptr; /* 一个浮点型的指针,指针指向的类型是float*/ char *ptr; /* 一个字符型的指针,指针指向的类型是char*/ 赋值: ; /*声明一个int型变量*/ int *ptr = NULL; /*声明一个int型指针,…
1. 指针阅读技巧:右左法则 (1)从最里层的圆括号中未定义的标示符看起 (2)首先往右看,再往左看 (3)遇到圆括号或方括号时可以确定部分类型,并调转方向 (4)重复 2.3 步骤,直到阅读结束 注意: 当读出是数组时,须读出元素个数.元素类型 当读出是函数是,须读出参数及类型,返回值类型 当读出是指针是,须读出指针所指向的类型,有时也须读出指针的类型. ① int (*p)(int*, int (*f)(int*)); A.读未标示符 f,向右遇”)”括号,调转向左遇*,所以 f 是个指针,…