指针的学习

1 指针作为参数传递其实也是值传递,传递的是一个地址值(和普通的值传递一样)。值传递时函数将形参被当做函数的局部变量来处理,就是在栈上开辟了内存空间来存放形参

void swap(int* a, int* b){

int t = *a;

*a = *b;

*b = t;

}

//这样并不能交换a,b

void swap1(int* a, int* b){

int* t = a;

a = b;

b = t;

}

2 char c[] = "ab" 和char* p = "ab"是不一样的

char c[] = "ab"中"ab"实际上是分配在栈上得,char* p = "ab" 中"ab" 是常量池分配

sizeof(c)= 3 sizeof(p) = 4

作为函数参数传递,则数组直接退化为指针

时间: 2024-08-18 12:26:41

指针的学习的相关文章

C语言中关于指针的学习

指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构: 能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C语言的功能. 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志.同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试.只要作到这些,指针也是不难掌握的. 指针的基本概念 在计算机中,所有的数据

【C语言学习】指针再学习(二)之数组的指针

★一维数组 一个整型数据为4个字节.4个字节就是32位,即可以表示2^32个数字 在程序中定义一个数组a[5] = {1,2,3,4,5}; 那么a[0]的地址就是0x00000000,数组名a是数组首元素的地址,a的地址也是0x00000000.a+1则表示的地址是0x00000004,而不是0x00000001.因为1这个值,根据前面的指针a所指向的类型的长度来调整自己的长度.也就是说如果a是指向整型的指针,那么后面加的1也表示4个字节,如果a是指向字符型的指针,那么后面加的1表示1个字节.

【C++】--关于指针的学习笔记

1.指针的定义 指针(pointer)是指向另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的间接访问. 与引用不同的几点: 1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象. 2.指针不一定要在定义时赋初值. note:在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值. 3. ...(待之后的学习实践中补充) 2.定义指针类型的方法 定义指针类型的方法是在变量名前面添加[*]星号,即将声明符写成[*d]的形式,d是变量名

《C和指针》学习笔记(1)

最近C语言已经学完,布置的大作业:学生管理系统5个版本也完成了.但是又买了一本<C和指针>,主要是感觉自己的指针还是没有完全熟悉.所以还是要好好研究一下.闲话不多说,直接第一章.一看是快速入门,以为很简单,但那个程序就把我卡了半天才看懂,按照作者说的的确运用了C语言中的大部分技巧. 程序1.1:首先读取一串列标号,这些列标号成对出现,便是输入行的列范围.这串列标号以一个负值结尾,作为结束标志.剩余的输入行被程序读入并打印,然后输入行中被选中范围的字符串被提取出来打印. 书中代码如下: #inc

结构体指针的学习

#include <stdio.h>struct Point{  /* 定义结构体 */double x;double y;double z;};int main(){    struct Point a={100,100,0}; /* 对点A进行初始化 */    struct Point b;    struct Point *c;    c=&b; /* 将b的地址给c */    (*c).x=a.x; /* 对c所代表的地址进行赋值,实质上是对b进行赋值 */    (*c)

野指针的学习

1.野指针     野指针是指向了"垃圾"内存的指着. 2.产生原因     (1)指针变量没有被初始化.任何指针变量刚刚被创建的时候,是不会自动变成NULL指针的,他的缺省值是随机的,这个时候指针是乱指的.所以指针变量在被创建的同时应该被初始化,让指针指向合法的内存.     (2)指针P被free或者delect之后,没有设置为NULL:当指着被free之后,其实就是释放了指针指向这块内存进行释放,也就是说指针依旧是指向这个地址,但是这个地址上面的东西不要了,并且系统也不会将这块内

智能指针_auto_ptr2_学习笔记

//1,release函数只是简单的转移对内存的拥有权,自己变成null,不会delete,一般在将所有权转移给别的智能指针的时候使用.具体可参加源码. 例: #include <memory> #include <iostream> using namespace std; class A { public:  A(int a):m_na(a)  {      cout<<"A cont" <<endl;  }  virtual ~A(

《C和指针》学习笔记(4)

进入<pointer on C>的第二章,不过感觉这一章没讲什么实质性的内容,主要是一些风格.字符以及一些古老的东西(比如三字母词)自己也不是很感兴趣.不过也算是了解一下C的历史了吧.不过问题和程序还是好好看了看. 比如又知道了一些转义字符: \?在书写多个分号的情况下使用,防止被解释为三字母词. \”用于表示一个字符串常量内部的双引号. \’用于表示字符常量. \\用于表示一个\ 写了一个例子: #include <stdio.h> #include <stdlib.h&g

《C和指针》学习笔记(2)

1.1  "hello world"程序不说了,codeblocks直接生成. 1.2   题目:从标准输入读取几行输入.每行输入都要打印到标准输出上,前面要加上行号.让程序能够处理的输入行没有长度限制. /*我的程序*//* int main() { int ch; int line=1; while((ch=getchar())!=EOF) { printf("%d",line); if(ch!='\n') printf("%c",ch);

C语言 ---- 指针 iOS学习-----细碎知识点总结

内存的访问形式:1.直接访问:通过变量名进行访问.2.间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间. 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址    int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0        printf("%p\n", p); // 输出指针变量的值,使用"%p"    printf("&num1 = %p\n", &n