c语言指针变量问题
发布网友
发布时间:2022-05-16 13:26
我来回答
共5个回答
热心网友
时间:2023-10-17 20:36
c 语言中,形式逻辑不成立,指针书写的外形,在声明中和在语句中,外貌相同,意思不同!
int *ptr; 这是声明,声明 ptr 是指针,用于指向 int 型变量。
语句中 *ptr 表示 指针指向的数值, ptr 表示 指针指向的地址。有*的是值,没星号的是地址。
ptr=(int *)malloc(num * sizeof(int)); 这是动态分配,分配了num个int型数值的存放空间,ptr 表示 指针指向的地址(分配了的空间的“始地址”)
你也可以理解成,定态声明了数组: int ptr[num]; 数组名ptr, 有 num个元素。
scanf("%d",&ptr[i]); ptr[i] 是数组第i号元素的值。&ptr[i] 是数组第i号元素的地址。
printf("%d",ptr[i]); 输出 ptr数组第i号元素的值.
---
深入理解:
语句里,ptr[i] 里的[] 实质上是运算符,ptr[i] 等价于 *(ptr+i)。是值。
语句里,&ptr[i] 等价于 (ptr+i) ,是地址。等于: ptr的地址+i * sizeof(int)。
热心网友
时间:2023-10-17 20:37
ptr申请了num个int型内存区域后,int *ptr就等价于int ptr[num]。
scanf("%d",&ptr[i])的意思是获取你输入的整数,赋值给ptr[i]。
printf("%d",ptr[i])输出的并不是ptr指针,而是ptr[i]的值,因为数组可以用下标取值。
ptr是指针变量,但是ptr[i]不是指针变量,ptr[i]可以理解为一个int型变量。
使用scanf存入时,&并不是加在ptr上,而是加在ptr[i]上,取的是ptr[i]的地址。[ ]的运算优先级高于取地址符&。
热心网友
时间:2023-10-17 20:37
1、给指针变量赋初值在语法上是没有错误的,编译执行也可以通过,但是一旦代码量增多后,很容易造成指针的错用,为了防止这一问题最好将指针变量定义的时候就置成NULL,这样做是为了代码安全着想。 2、指针定义后就会随机指向一个位置的,编译的时候也不会提示错误,程序短很容易找出来,长了多了就难找了,所以这是一个好习惯吧。
热心网友
时间:2023-10-17 20:38
scanf("%d",&ptr[i])是从键盘读入一个十进制整数,并存入到数组元素ptr[i]中。
int *ptr=NULL;
ptr=(int *)malloc(num * sizeof(int));
是根据输入的num的大小动态申请数组的方法。ptr是一个指针(同时也是ptr数组的数组名)
相当于静态申请数组
int ptr[num];
的作用,只是这两都分别从系统的位置不同区域申请内存(初学者可暂时忽略这一点,使用上是完全一样的)。
ptr[i]就是这个数组中的一个成员,加上取地址符&,就是告诉C系统,读取到的数据要存放的位置,
scanf("%d",&ptr[i]);完全等同于scanf("%d",ptr+i);---------scanf函数的使用格式如此,必需要使用数据存放地址的。
热心网友
时间:2023-10-17 20:39
int *ptr是指针,malloc了num个int后,ptr指向这段连续的内存,ptr其实就是num个int的数组的头指针,也可以将ptr认为元素是int的数组。[]符号你可以认为是取值操作,那么ptr[0]或者*(ptr)就是第一个元素,ptr[1]或者*(ptr+1)就是第二个元素...
scanf("%d",&ptr[i])就是依次对这个数组(连续的内存)赋值。
scanf的函数定义,这里是个地址,也就是指针,&是取地址操作,也可以写成scanf("%d", ptr+i);
printf("%d",ptr[i])是输出第i个元素(连续内存的第i个值)
c语言指针赋值问题?
选项A,指针变量需要赋值一个变量的地址,A选项中将x变量的地址赋值给指针变量pb,B选项不能将一个变量直接赋值给指针变量。选项C,C选项中的赋值语法是错误的,正确的赋值语法应该是和A选项相同。D选项的错误类型和C选项的类似,所以综合以上分析,正确的答案为A。
C语言 指针变量
1)先看变量q的定义:int *q ;q是一个指针(地址),在指针(地址)所指向的位置存放了一个整型值 2)再看答A:q = n;这个赋值表达式表示,将变量q赋值为变量n,而n的定义为 int n 初值为2 3)答案A错误的原因:按照1)中的定义,q的值只能是地址,而q=n却将整型变量值直接赋给地址。
c语言中指针变量的作用?
int main(){int num;double sum = 0;int count = 0;while(scanf("%d", &num) && num != -1)//输入-1停止} {sum += num;count++;} printf("%f", sum / count);return 0。
C语言中的指针为什么会改变变量的值?
pa=&a;句是将指针*pa指向变量a。pa存放的是a的地址,*pa其实就是a,可以理解为把a换了一个名字表示。*pa=20就是对a进行赋值操作,等于a=20;a的值当然改变了。看看指针的知识吧!
C语言中指针能当变量使用吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即 int a[n];可改为 int* ...
如何用c语言编写一个指针变量?
在C语言中,指针变量是一个存储其他变量地址的变量。以下是如何在C语言中声明和初始化一个指针变量的示例:在这个例子中,我们首先声明并初始化了一个整数变量 num。然后,我们声明了一个指针变量 ptr。接着,我们使用 & 运算符获取 num 的地址,并将这个地址赋值给 ptr。最后,我们使用 printf 函数...
C语言指针问题
假如 P 是指针 那么 *p 就代表变量。 而&a是地址, *p=&a 就是把地址给变量,当然不正确了,因为地址只能给指针。p2,*p1都是变量,变量之间互相赋值是正确的。“原因是被赋值的指针变量前不能再加*说明符”这句话的意思是:如果 给 指针P加上“*”,那么它就变成 了变量,代表的意义...
c语言程序指针问题
C语言规定,一个指针变量只能指向同类型的变量,不能时而指向一个整型变量,时而 指向一个字符型变量。当然,如果程序中确实需要进行不同类型的 指针变量进行赋值时, 则需要进行强制类型转换。3、混淆指针变量和它所指向的数据而导致程序错误如在程序main(){int ...
C语言指针问题。
这是一个运算顺序的问题。注意括号的运用。(1) ++(*pointer)是先取值,再自增,当前pointer指向的是位置arr[3],取值后是2,*pointer的结果是2,2再自增,当然会得出3。值得说明的是,这个括号是可以省略的,此处括号只起到增加程序可读性的作用。(2)*(pointer-2)是先移动指针,再取值。
C语言指针问题
一、如有定义char y[4]= "321"则表达式 *y+2的值是'5' 。分析:y是字符串数组首元素'3'的地址,*y的值就是字符'3',再加上2,就是字符'5'(也可以说是字符'5'的ASC码值)。二、 如有定义char z[2][4]={"MAT", "LAB"};,则表达式*(*z+2)的值是 'T'。分析:z是二维字符...