学习指针遇到的问题

第一个问题:

上边这个图中打印出来的ptr1的地址和&ptr1的地址分别是什么的地址?

我理解的ptr1的地址就是ptr1这个指针变量自己的地址,&ptr1的地址就是ptr1这个指针指向的地址,也就是这个程序中urn这个字符数组的首地址,是这样吗?

如果我的理解是正确的话,是不是就是代表ptr1 = urn;这句话把urn的地址赋给指针ptr1就可以理解为,ptr1这个指针本身的地址不变,ptr1这个指针指向urn的首地址。

第二个问题:

在书中讲const关键字的时候提到了const关键字在指针变量之前时,指针p是可以改变的,指针所指向的内容是不可改变的。比如:

1 int const a = 100;
2
3 cons tint *p;
4
5 p = &a;

这里指的指针所指向的内容不可变是指p的类型不可变,只能是整数型还是指a的值不能变?我编程调试的时候发现a的值是可变的,所以是不是这里指的内容不可变指的就是内容的类型不可变。

第三个问题:

在书中讲const关键字的时候提到了const关键字在指针变量的定义之中,指针p的值不能改变,指的是指针只能指向某个地址不能改变吗?如果是这样的话(看下面的代码),p就是只能指向a的地址不能再改变了吗?那这样的话是不是改变a的值再打印*p的值就是已经修改过的a的值。

1 int a = 100;
2 int * const p = &a;

指针这一块的知识之前基本为零,所以这两天看的很吃力,进度有点慢,希望老师给解答一下,然后你看看指针这一块有没有什么需要注意的,需要特别注意去学习的地方跟我说一下。

时间: 2024-12-07 00:57:38

学习指针遇到的问题的相关文章

C语言学习——指针

指针 在学习指针之前,首先应该了解一些东西: 内存是什么? 从硬件形态上说,内存就是一条形物理设备,从功能上讲,内存是一个数据仓库,程序内在执行前都要被装载到内存中,才能被中央处理器执行.内存是由按顺序编号的一系列存储单元组成的,在内存中,每个存储单元都由唯一的地址,通过地址可以方便地在内存单元中存储信息.在计算机中,一切信息都是以二进制数据的形式体现的,每个内存单元的容量是1B,即8bit(8个0.1二进制位). 1.取地址运算符&, 间接运算符* &运算符:  取地址运算符,&

学习指针变量占用内存字节数相关心得

在学习设置数据收发缓冲区时,做以下实验 void main () { LPBYTE m_data=new BYTE[16]; memcpy(m_data,"example",sizeof(m_data)); string str=" "; str[0]=m_data[3]; cout<<str<<endl; } 函数memcpy(m_data,"example",sizeof(m_data));将“example”在内存中

Golang 才是学习指针的安全之地,关于指针的二三事

感谢平台分享-http://bjbsair.com/2020-04-10/tech-info/53305.html 本章学习目标 学会声明和使用指针 理解指针和随机访问存储器(RAM)之间的关系 了解指针的使用时机 当我们在街上散步的时候,常常会看到一些用于指引方位的地址和街道标识.你可能曾经遇到过这样一种情况,一家大门紧闭的商店在它的橱窗上贴出了道歉标语"抱歉,本店已乔迁新址!",并在标语的下方给出新的地址.指针就有点儿像这个给出新地址的标语,它会把你指引至不同的地址. 指针是指向另

150312——开始学习指针

引入指针学习,依旧是那个几乎每本书上都会提到的交换两个数数值的程序: 1 #include<stdio.h> 2 void interchange(int *m,int *n); 3 int main() 4 { 5 int x=1,y=3; 6 7 interchange(&x,&y); //向函数传送地址 8 printf("x=%d,y=%d\n",x,y); 9 return 0; 10 11 } 12 13 void interchange(int

传智播客视频学习 ----&gt;&gt;&gt;&gt; 指针 int *p, p是什么,&amp;p是什么,*p是什么

int *p = NULL; p:指针p所指向的内存的地址 *p:指针p所指向的内存地址的值 &p:指针p的地址 1 #ifndef _CODE_POINTER_DEMO01_H_ 2 #define _CODE_POINTER_DEMO01_H_ 3 4 #include <stdlib.h> 5 #include <string.h> 6 #include <stdio.h> 7 8 int main(){ 9 10 int a = 10; 11 12 ch

c语言学习-指针探究

1:指针定义格式:格式:变量类型 *变量名用途:指针变量用于储存地址(only),也就是根据地址值,访问对应的存储空间. 注意.int *p 只能指向int类型的数据: 例: int a = 20; int *p; p = &a; //既p代表地址,*p代表值 //这时的* 代表指针变量p指向的存储空间,目的:改变p代表的地址指向的空间. 任何指针类型,都是占用8字节的存储空间. 指针的长度,是要根据指向的数据的地址,来取多少长度的数据,所以为防止取错数据需要和指向数据的类型一致. 注意:指针+

C++学习---指针相关

1.指向 “指针对象” 的 ”指针” 一般指针 int *p1,ival =42; p1 = &ival; 或者 int ival =42,*p1=&val; 代表一个指针对象指向一个同类型的地址区域,如果想要得到值用解析符*即可 *p1 //p1存储的是一段内存地址,*符号解析该地址等到值42 指向 指针对象 的 指针 上图是指向int对象的指针,而现在的对象则是指针对象. int i = 42,*p1,**p2 ; p1 = &i; p2 = &p1; 需要使用**是有

go语言学习--指针数组和数组指针

数组指针(也称行指针)定义 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++;       //该语句执行过后,也就是p=p+1;

C++学习---指针与数组

1.数组 由具体详相同数据类型的数据元素按照一定顺序排列而成的集合,由字符数组.常量数组.实数数组和指针数组等. 1.1一维数组 //一维数组的定义 类型 数组名[常量表达式]: float arry[10]; //其中常量表达式为数组大小,不能含有变量 //一维数组的存储 数组名为数组首元素地址,后续元素按照下标顺序连续存储 int a[6]; //说明6个int型数据按照顺序依次排列 //一维数组的初始化 int a[5] = {1,2,3,4,5}; int a[5] = {1,2,3}/