12月13号指针数组笔记

转载 2017年12月13日 19:38:12




指针进行运算时,要确保指针说指向的内存区域一致
比如 指向不同数组的两个指针,进行运算得到的结果没有意义.




数组指针:
将数组名作为参数传递给函数时,实际上是传递的数组的首地址.




函数的形参可以写成以下形式:
void f(int a[10])
或void f(int a[])
或void f(int *a)




定义的格式:  int (*变量名)[数组列数] 
int  a[10],   *p = a;
int b[10][10], (*p2)[10] = a;




如果要传二级指针:
void f(int (*p)[10]);
void f(int a[10][10]);


一、指针常量:int const *p;或者是 const int *p;指针指向的对象是常量,那么这个对象不能被更改。




int a = 5;


const int b = 8;


  const int *c = &a; // 这是合法的,非法的是对c的使用


*c = 6; // 非法,但可以这样修改c指向的对象的值:a = 6;


const int *d = &b; // b是常量,d可以指向b,d被赋值为b的地址是合法的




二、常量指针:int *const p;指针常量的值是指针,这个值因为是常量,所以不能被赋值。




char *a = "abcde1234";


char *b = "bcde";


char *const c = &a;


  下面的操作是可以的。


  a[0] = 'x'; // 我们并没有限制a为常量指针(指向常量的指针)


或者


*c[0] = 'x' // 与上面的操作一致






三、指针常量的指针常量;指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。




char *a = "abcde1234";


const char *b = "bcde"; // b是指向常量字符串的指针变量


char *const c = &a;  // c是指向字符指针变量的常量


const char *const d = &b; // d是指向字符常量的指针常量






四、指针的偏移


void test(int *p1, char *p2, double *p3, short *p4)//取地址
{
int i;;
for (i = 0; i < 5; i++)
{
printf("%p %p %p %p", p1++, p2++, p3++, p4++);
getchar();
}
}
int main()
{
int            a[5] = { 1 };
char        b[5] = { 0 };
double    c[5] = { 0 };
short       d[5] = { 0 };
test(a, b, c, d);
getchar();


}


指针偏移会根据指针数组的类型为长度进行偏移


int a[n], 则a是一个数组类型,而不是int型了,要注意正确对待。
 
 a与&a的值一样,但意义不一样, a+1的偏移量为一个int,相当于&a[0], &a+1的偏移量为真个数组。是数组类型的指针


malooc函数:叫动态内存分配


如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。


关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。






realloc函数:原型是extern void *realloc(void *mem_address, unsigned int newsize);




指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
新的大小可大可小(如果新的大小大于原内存大小,则新分配部分不会被初始化;如果新的大小小于原内存大小,可能会导致数据丢失 )
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
        当内存不再使用时,应使用free()函数将内存块释放。
 

有关C/C++指针的经典面试题

参考一: 有关C/C++指针的经典面试题     C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中...
  • zhu2695
  • zhu2695
  • 2016年08月23日 13:19
  • 3048

【IOS 开发学习总结-OC-7.11-★】 objective-c——指针数组和指向指针的指针

指针数组与 main() 函数形参有时需要一次声明具有多个相同特征的指针变量,此时可借助,指针数组来实现。指针数组使用最多的地方是处理字符串数组的情况,由于字符串本身需要使用 char * 型指针变量...
  • senwin2009
  • senwin2009
  • 2015年09月17日 15:36
  • 2181

C++对象指针数组与堆中对象数组

#include using namespace std; /*堆中对象数组、对象指针数组*/ class stu { public: void set(int x){i = x + 6;} i...
  • u010738823
  • u010738823
  • 2016年05月06日 11:15
  • 1681

杰奇采集规则,书书网采集规则,12月13号亲测

  • 2011年12月13日 15:26
  • 1KB
  • 下载

2016年12月6日学习总结----指针与数组的区别

声明:本文转自http://c.biancheng.net/cpp/html/476.html 一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解: 指...
  • SQyelZYH
  • SQyelZYH
  • 2016年12月06日 22:41
  • 161

C语言指针数组函数笔记

  • 2009年06月01日 19:16
  • 58KB
  • 下载

指针和数组学习笔记

  • 2017年11月24日 19:35
  • 23KB
  • 下载

C语言学习笔记变量数组指针

  • 2010年08月25日 23:31
  • 116KB
  • 下载

初学JVAV 笔记 7月13号 JDK环境配置 介绍JAVA Java如何运行的

个人初学Java笔记
  • u012717105
  • u012717105
  • 2017年07月13日 18:40
  • 104

C++ Primer 学习笔记:指针数组 VS 数组指针

**指针数组:**array of pointers,即用于存储指针的数组,也就是数组元素都是指针 **数组指针:**a pointer to an array,即指向数组的指针 还要注意的是他们...
  • JackZhang_123
  • JackZhang_123
  • 2017年12月31日 13:28
  • 24
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:12月13号指针数组笔记
举报原因:
原因补充:

(最多只允许输入30个字)